【发布时间】:2021-03-08 15:47:33
【问题描述】:
我无法从内置异步数组函数中正确抛出错误,我收到以下错误 - (node:12104) UnhandledPromiseRejectionWarning: Error: non existent item provided
这显然与错误是从 forEach() 异步函数中抛出的事实有关,因为如果我将它抛出该函数之外,它会被正确捕获。
功能:
async myFunction(obj) {
obj.items.forEach(async item => {
if (itemDict[item]) {
// do something
} else {
throw new Error('non existent item provided');
}
});
}
测试:
describe('type.js', async function() {
it('throws error if non existent item is provided', async function() {
try {
const type = new Type();
await type.myFunction({
items: ['item']
});
expect.fail('test failed');
} catch (err) {
expect(err.message).to.be.equal('non existent item provided');
}
});
});
我尝试将 forEach() 包装在一个额外的 try/catch 块中,但得到相同的错误,并且永远不会触发 catch 块。
async myFunction(obj) {
try {
obj.items.forEach(async item => {
if (itemDict[item]) {
// do something
} else {
throw new Error('non existent item provided');
}
});
} catch (err) {
console.log('caught');
}
}
我哪里错了?
【问题讨论】:
-
@EmielZuurbier 这不是我实际使用的,我已经更新了我的示例。谢谢。
标签: javascript node.js promise async-await try-catch