[英]Sending multiple responses with the same response object in Express.js
[英]Express.js sending response in promise .catch() error
我有一个看起来像这样的 function:
function x(req, res, next){
await doSomething().catch(error =>{
return res.send('error here'})
}
await doSomethingElse().catch(error =>{console.log(error)})
return res.send('success');
}
当 doSomething() 返回错误时,我得到“在将标头发送到客户端后无法设置标头”,我理解,但是为什么在我调用第一个 res.send 时脚本没有终止?
我的猜测是它类似于回调,因为返回的值被忽略,所以它发送响应,但忽略了脚本应该在那里结束的事实。
我该如何解决这个问题?
当您混合.catch()
和await
时,控制流程变得非常复杂。 我强烈建议一次只使用一个 model。 使用 await,您可以执行以下操作:
async function x(req, res, next) {
try {
await doSomething();
await doSomethingElse();
res.send('success');
} catch(e) {
console.log(e);
res.send('error here'})
}
}
为什么当我调用第一个 res.send 时脚本没有终止?
因为该语句中的return
只是从.catch()
处理程序返回,而不是从您的主 function 并且由于您已经完成了.catch()
并且没有在该 catch 处理程序中抛出或从处理程序返回被拒绝的 promise,所以父 promise 因为在await
之后解析和执行继续正常,然后导致您遇到第二个res.send()
,这会导致有关已发送标头的警告。
如果你想使用 .then( .then()
.catch()
试试:
function x(req, res, next) {
doSomething()
.catch((error) => {
return res.send("error here");
})
.then(() => {
doSomethingElse()
.catch((error) => {
console.log(error);
})
.then(() => {
return res.send("success");
});
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.