【发布时间】:2019-08-08 23:30:02
【问题描述】:
发现了类似的问题,但没有一个回答我的问题。在抛出错误之前,我需要尝试运行异步函数 3 次。目前正在使用 while 循环执行此操作,开始时感觉不对。这一切都发生在快速路线上。这是我的代码目前的样子:
const MAX_NUMBER_OF_TRIES = 3
router.post('/', async function (req, res) {
let tries = 0
while (true) {
try {
await myAsyncFunction(body)
res.json({ success: true, message: 'Done!' })
} catch (err) {
if (tries >= MAX_NUMBER_OF_TRIES) {
res.json({ success: false, message: err && err.message })
}
}
tries++
}
}
其中一个问题是,当我这样做时,我总是收到以下错误:
UnhandledPromiseRejectionWarning: 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头
如果没有循环,这不会出现。 所以我想问题是,如何在响应错误之前将这些调用限制为三次尝试?这是正确的路径还是有其他方法可以做到?为什么我会遇到标题问题?
【问题讨论】:
-
循环什么时候结束?提示:从不。
-
learnrxjs.io/operators/error_handling/retry.html 可能是
rxjsretry运营商会为你做的 -
要处理错误,您必须在异步函数旁边调用
catch函数 -->myAsyncFunction(body).catch(x => {}); -
错误是关于设置
headers,但你的代码与错误无关。 -
@Sergej Not necessary to catch it like that,因为 myAsyncFunction 已经在等待。此外,
res.json设置内容 和 标头,这就是如果它被调用两次会导致错误的原因。
标签: javascript node.js express async-await