繁体   English   中英

Continue.map 循环后 util.promisify 请求迭代失败(异步等待)

[英]Continue .map loop after util.promisify request fails in iteration (async await)

我有下面的异步 function 接受 4 个对象的数组。 第一个在 a.map 循环中处理,该循环执行查询并导致错误(在 await executeQuery(queryString) 中)。 当这第一个 object 处理完成时,循环结束,其他 3 个对象不处理。

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) 并考虑将其修改为 await Promise.all(promises).catch(); 可以解决问题,但在第一个 object 迭代时仍然失败。

我想知道在executeQuery中遇到错误后如何最好地继续执行.map循环。

谢谢,麻烦您了!

不是 100% 确定这段代码发生了什么,但我会改变一些事情。 首先,在循环中使用await不是一个好习惯,其次,您的promises数组可能不是您所期望的,因为await会产生,直到每个 promise 在循环内得到解决。 map Promises返回Promise以生成一个 Promise 数组,每个 Promise 将在自己的时间内解析和处理数据。 然后,您可以await所有承诺并使用try/catch捕获任何错误。 类似于以下内容的内容应该可以满足您的期望...

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM