[英]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.