【发布时间】:2018-10-12 22:16:15
【问题描述】:
我发现了许多类似的问题,但没有一个具有相同目的(或者我只是不明白?也可以这样)。
我有一个元素数组,一个对元素执行异步操作并返回一个承诺的函数 A,我正在处理的函数 B 应该为每个数组元素调用 A,并返回一次承诺所有的 A 调用都已完成。我怎样才能做到这一点? 相关代码:
var img = [];
img[0] = "http://www.something.com/picture0.jpg";
img[1] = "http://www.something.com/picture1.jpg";
img[2] = "http://www.something.com/picture2.jpg";
function ask(img)
{
return new Promise((resolve, reject) =>
{
if(something)
{resolve("test");}
else
{reject("test");}
}
}
function analyze_all(img)
{
for(var i in img)
{
ask(img[i])
.then((res) =>
{
???
})
.catch((err) =>
{
???
});
}
return ???
}
我想过将所有结果推送到一个列表中,如下所示:
function analyze_all(img)
{
var ret = [];
for(var i in img)
{
ask(img[i])
.then((res) =>
{
ret.push({image: img[i], data: res});
})
.catch((err) =>
{
ret.push({image: img[i], error: err});
});
}
return ???
}
但是我怎么知道所有异步调用什么时候完成呢? 请帮忙!
解决了。此外,如果有人有类似的需求并且想要获得所有“返回”值,无论他们是解决还是拒绝,我建议检查以下链接: https://nmaggioni.xyz/2016/10/13/Avoiding-Promise-all-fail-fast-behavior/
【问题讨论】:
-
您可以使用
Promise.all将promise 列表转换为解析为列表的promise。 -
我没看懂,列表中必须包含函数调用返回的Promise或者resolved的值?
-
承诺会在某个时候解析为你想要的值。
标签: javascript arrays node.js asynchronous promise