【发布时间】:2016-10-27 06:06:50
【问题描述】:
我想获取多张图片并将它们转换成 blob。我是一个关于承诺的新手,我尝试过但我无法通过。
下面是一个.fetch() 承诺
fetch('http://cors.io/?u=http://alistapart.com/d/_made/d/ALA350_appcache_300_960_472_81.jpg')
.then(function(response) {
return response.blob();
})
.then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
document.getElementById('myImage').src = objectURL;
});
现在多个.fetch() 承诺(不工作)
var promises = [];
for (var i = values.length - 1; i >= 0; i--) {
promises.push(fetch(values[i]));
}
Promise
.all(promises)
.then(function(response) {
for (var i = response.length - 1; i >= 0; i--) {
return response[i].blob();
}
})
.then(function(blob) {
console.log(blob.length); //undefined !!!
for (var i = blob.length - 1; i >= 0; i--) {
console.log(blob[i]);
lcl_images[i].value = URL.createObjectURL(blob[i]);
document.getElementById(lcl_images[i].id).src = objectURL;
}
})
.catch(function(error) {
console.log(error);
});
【问题讨论】:
-
那么
.blob()方法返回什么,blob还是promise? -
.blob() 返回一个 blob(),但如果你正在做多个承诺,你必须在
.then(response)中输入return Promise.all(blobs)。在此之后,.then(blob)-> blob 是 blob 对象数组 -
好的,所以如果
.blob()是同步的,那么你不需要两个.then。Promise.all(promises).then(function(responses) {...}).catch(...);将完成这项工作,而无需创建 blob 数组。 -
如果你自己试试这行不通,我是一个关于承诺的新手。我已经按照你说的做了几次尝试,但你必须返回承诺
response[i].blob()并且在下一个.then你将拥有 blob 对象。 -
我会为你写一个答案。
标签: javascript promise blob fetch