如何解决除了错误消息,您还应该如何访问Promise.allSettled中对象数组中返回的堆栈跟踪?
Promise.allSettled()返回状态为满足或拒绝以及原因的对象数组,例如:'[{状态:'被拒绝',原因:'错误:一些错误消息},...]'>
如果您用console.log记录错误,则可以查看原因和堆栈跟踪。但是,将输出保存到日志文件时,您只需查看原因即可,而不是完整的堆栈跟踪信息。您还如何保存堆栈跟踪?
解决方法
原因会给您错误消息。要进行完整的堆栈跟踪,请使用reason.stack,如下所示。这里的示例正在批处理大量的Promise,以免耗尽内存,同时还保存了堆栈跟踪:
const fs = require('fs');
const batch = async myArr => {
const res = [];
for (let i = 0; i < myArr.length; i += 2) {
const requests = myArr.slice(i,i + 2).map(num => {
if (num % 2 === 0) {
return Promise.resolve(num);
}
if (num % 2 === 1) {
return Promise.reject(Error(`Rejected promise in for loop at num ${ num }`));
}
});
// eslint-disable-next-line no-await-in-loop
await Promise.allSettled(requests)
.then(response => res.push(response));
}
return res.flat();
};
batch([1,2,3,4,5,6])
.then(res => {
let failed = [];
failed = res.filter(re => (re.status === 'rejected'));
for (let i = 0; i < failed.length; i += 1) {
fs.appendFileSync('reasons.txt',`${ failed[i].reason }\n`);
fs.appendFileSync('stack-traces.txt',`${ failed[i].reason.stack }\n`);
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。