如何解决util.promisify请求在迭代中失败后继续.map循环异步等待
我有下面的异步函数接收4个对象的数组。第一个在.map循环中处理,该循环执行查询并导致错误(在await executeQuery(queryString)中)。当第一个对象完成处理后,循环结束,其他三个对象未处理。
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();
}
我最初只等待Promise.all(promises),并考虑将其修改为等待Promise.all(promises).catch();可以解决问题,但仍然无法对第一个迭代对象进行故障处理。
我想知道如何在执行查询中发现错误后继续实现.map循环。
请谢谢!
解决方法
不能100%确定这段代码会发生什么,但是有些事情我会改变。首先,在循环中使用<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root'></div>
不是一个好习惯,其次,在循环中每个承诺都得到解决之前,await
可能不是您期望的promises
数组,因为await
会屈服。从Promise
函数返回map
以生成Promises
的数组,每个数组都将在自己的时间内解析和处理数据。然后,您可以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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。