我开始研究Promise,发现了有趣的Promise.all。
在MDN上它被定义为:
Promise.all(iterable)方法返回一个promise,当可迭代参数中所有promise都已解决时,该promise将解决。
这基本上意味着,如果参数列表中的所有promise都已解决,那么设定的promise会在它们之后解决。我尝试了实现它,并进行了简单的promise ajax调用。
var get = function(url) {
return new Promise(function(resolve,reject) {
var xhtml=new XMLHttpRequest();
xhtml.open("GET",url);
xhtml.responseType = 'blob';
xhtml.onload = function() {
if(xhtml.status==200){
resolve(xhtml.response);
} else {
reject(Error("Error"+statusText));
}
}
xhtml.send();
});
}
get("one.jpg").then(function(response){
var blob = window.URL.createObjectURL(response);
var img = document.createElement("img");
console.log("Success"+response);
img.src = blob;
document.body.appendChild(img);
});
这个代码本来是正常的。但是当我尝试添加Promise.all之后,它就抛出了一个错误。
Promise.all(get).then(function(response){alert("done")});
就像我所说的,出现了一个错误:"Promise.all的第1个参数无法转换为序列。" 所以我认为我没有理解Promise.all的含义。它是如何工作的?
get
是一个函数;Promise.all()
接收一个 Promise 对象数组。 - Dan