javascript - 每个数组元素的异步调用并等待完成

标签 javascript arrays node.js asynchronous promise

我发现了很多类似的问题,但没有一个具有相同的目的(或者也许我只是不明白?也可以是这样)。

我有一个元素数组,一个函数 A,它对一个元素执行异步操作并返回一个 Promise,而我正在处理的函数 B 应该为每个数组元素调用 A,并返回一个 Promise 一次所有 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:

function analyze_all(img) {
    var ret = [];
    for(var i in img) {
        ret.push( 
          ask(img[i]).then((res) => {
            // something
          })
          .catch((err) => {
            // something
          })
        )
    }
    return Promise.all(ret);
}

关于javascript - 每个数组元素的异步调用并等待完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50140817/

相关文章:

php - jQuery AJAX 请求在页面加载时不起作用,但是它在调试控制台中起作用

C++ - float 组 vector

javascript - 无法从 Azure IOT 中心下载容器中的所有 Blob 并收到错误 : Cannot read property 'on' of undefined

javascript - RxJs-Observable-如何从 JSON 对象获取数据

javascript - CRM 2013 中的可编辑 GridView

在C中将ASCII码转换为字符串

javascript - Nodejs 和 webSockets,触发事件?

javascript - 如何从带有单引号和大括号的 Web 服务接收的 JSON 对象中提取数据?

java - GWT 远程日志记录无法记录 Throwable Stacktrace?

javascript - 遍历数组中的项目以分配数据 ID,但仅获取数组中的最后一项