【发布时间】:2019-03-22 18:40:59
【问题描述】:
NodeJS 版本 8.11 - 警告是“此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。”
这些都不是真的,你可以通过检查我的测试用例看到:
const DEMONSTRATE_FAILURE = false
async function doPromises() {
try {
if (DEMONSTRATE_FAILURE) {
// This causes UnhandledPromiseRejectionWarning warnings:
const brokenPromises = [createPromises(), createPromises()]
await brokenPromises[0]
await brokenPromises[1]
} else {
// This works fine:
await createPromises()
await createPromises()
}
} catch(err) {
process.stdout.write("x")
}
}
// Create 10 promises, of which 50% will reject after between 0 and 1000ms
function createPromises() {
let badPromises = []
for (let x = 0; x < 10; x++) {
badPromises.push(new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() > 0.5) {
process.stdout.write("-")
reject("rejected!")
} else {
process.stdout.write("+")
resolve()
}
}, Math.round(Math.random() * 1000))
}))
}
return Promise.all(badPromises)
}
(async function main() {
while (true) {
await doPromises()
}
})()
翻转DEMONSTRATE_FAILURE 标志以查看相同代码运行时出现和未出现错误的情况。
【问题讨论】:
标签: node.js promise async-await