首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在迭代中util.promisify请求失败后继续.map循环(异步等待)

在迭代中util.promisify请求失败后继续.map循环(异步等待)
EN

Stack Overflow用户
提问于 2020-08-18 01:36:00
回答 1查看 182关注 0票数 0

我有下面的异步函数,它接受4个对象的数组。第一个在执行查询的.map循环中处理,并导致错误(在等待executeQuery(QueryString)中)。当第一个对象完成处理时,循环结束,其他3个对象不被处理。

代码语言:javascript
运行
复制
async function myFunction(arrayOfObjects, param1) { 

     const promises = arrayOfObjects.map(async function (currElement, i) {
          var queryString = 'www.querystring.com?APIparameter=param1';
          
          const executeQuery = util.promisify(request);

          await executeQuery(queryString).then(data => {

          //process data here using currElement, i
          
          }).catch(err => console.log('error: ', err));   
     });

     await Promise.all(promises).catch();
}

我最初只有await Promise.all(promises),并认为修改它以等待Promise.all(promises).catch();可以做到这一点,但它仍然在迭代的第一个对象上失败。

我想知道在错误命中executeQuery中的捕获后,如何最好地实现继续.map循环。

请和谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-08-18 10:30:31

不是100%确定这段代码发生了什么,但有一些事情我会改变。首先,在循环中使用await不是一种好的做法,其次,您的promises数组可能不是您所期望的,因为在循环中解析每个promise之前,await都会让步。从map函数返回Promise,以生成一个Promises数组,每个数组将在各自的时间内解析和处理数据。然后,您可以使用try/catch await所有的promises并捕获任何错误。类似于下面的代码应该可以实现您所期望的功能...

代码语言:javascript
运行
复制
async function myFunction(arrayOfObjects, param1) {

    const executeQuery = util.promisify(request); 

    const promises = arrayOfObjects.map((currElement, i) => {

        const queryString = 'www.querystring.com?APIparameter=param1';

        return executeQuery(queryString).then(data => {

             // process data here using currElement, i
        });   
    });

    try {

        await Promise.all(promises);

        // all promises will be resolved here

    } catch (err) {
        console.log('error: ', err);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63455891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档