我有下面的异步函数,它接受4个对象的数组。第一个在执行查询的.map循环中处理,并导致错误(在等待executeQuery(QueryString)中)。当第一个对象完成处理时,循环结束,其他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),并认为修改它以等待Promise.all(promises).catch();可以做到这一点,但它仍然在迭代的第一个对象上失败。
我想知道在错误命中executeQuery中的捕获后,如何最好地实现继续.map循环。
请和谢谢!
发布于 2020-08-18 10:30:31
不是100%确定这段代码发生了什么,但有一些事情我会改变。首先,在循环中使用await不是一种好的做法,其次,您的promises数组可能不是您所期望的,因为在循环中解析每个promise之前,await都会让步。从map函数返回Promise,以生成一个Promises数组,每个数组将在各自的时间内解析和处理数据。然后,您可以使用try/catch await所有的promises并捕获任何错误。类似于下面的代码应该可以实现您所期望的功能...
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);
}
}https://stackoverflow.com/questions/63455891
复制相似问题