【发布时间】:2020-05-07 20:29:56
【问题描述】:
我正在尝试在 JavaScript 中使用 forEach 循环和 async 回调来循环数组。问题是当我抛出异常时,它会给出
(node:2500) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 6)
虽然我在forEach 之后有一个catch 块。这是我的代码
async function func() {
try {
array.forEach(async (e) => {
try {
let bom = await BOMChild.findOne({
where: { id: e.id },
});
if (bom.BOMProductId || bom.BOMProductId === 0) {
throw {
name: " error",
description: `Description `,
};
}
} catch (e) {
throw e;
}
});
} catch (e) {
//exception caught
}
}
我做错了什么以及解决此问题的可能方法是什么。 TIA
【问题讨论】:
-
throw e;不会被扔到.forEach之外。我很难解释它是如何工作的。尝试阅读有关lambda的信息,具体是做什么的。也许这会有所帮助:vinta.com.br/blog/2015/javascript-lambda-and-arrow-functions -
forEach是一个调用你的实现的函数。在forEach中,我敢肯定,它是一个try-catch,它吸收了所有实现错误(比如异常,即使你抛出它)不会破坏forEach。 -
@KunLun 没有。您可以轻松地从回调中抛出异常以停止
forEach。它返回的承诺稍后会拒绝,这无济于事。
标签: javascript asynchronous promise async-await es6-promise