Javascript 我如何在多重承诺中传递错误?
因此,基本上我试图通过传递一个错误值来创建一个错误处理程序,在我的例子中,这个错误值是一个状态代码的数字,比如400、500等等。 现在的问题是当Javascript 我如何在多重承诺中传递错误?,javascript,node.js,ecmascript-6,promise,es6-promise,Javascript,Node.js,Ecmascript 6,Promise,Es6 Promise,因此,基本上我试图通过传递一个错误值来创建一个错误处理程序,在我的例子中,这个错误值是一个状态代码的数字,比如400、500等等。 现在的问题是当catch捕捉到错误时,该错误包含从上一个承诺返回的状态代码的值。当我记录该值时,它会正确记录该值,但当我拒绝该值并传递该值以便在下一个承诺的catch中捕获该值时,它会说该值未定义 以下是错误代码: 未处理的PromisejectionWarning:范围错误 [错误\u HTTP\u无效\u状态\u代码]:无效状态代码:未定义 JS: 履行承诺:
catch
捕捉到错误时,该错误包含从上一个承诺返回的状态代码的值。当我记录该值时,它会正确记录该值,但当我拒绝该值并传递该值以便在下一个承诺的catch
中捕获该值时,它会说该值未定义
以下是错误代码:
未处理的PromisejectionWarning:范围错误
[错误\u HTTP\u无效\u状态\u代码]:无效状态代码:未定义
JS:
履行承诺:
makeOrder('test', 'this is body', {id: 'test'})
.then(obj => res.send(obj))
.catch(err => res.sendStatus(err.message));
我刚从es5迁移到es6,因此如果您有更好的想法来改进我的代码,我们将不胜感激。如果您想使用
async
函数,您可以进一步减少代码
Promise
错误将成为异常,因此请使用try…catch
来处理它
从async
函数返回有效解析
承诺,抛出错误有效拒绝
它。(就像他们在《承诺》中一样)
即使你想用老办法,通常都是用
return findFromModel(userModel, userQuery)
.catch(err => {console.log(err); throw err;});
您从未定义属性
消息
。你是说err
而不是err.message
?这实际上是因为在我的项目中,当承诺得到解决时,我可能会运行更多的函数来抛出新的错误对象。抱歉造成混淆。请避免使用此选项!
const makeOrder = async (title, body, userQuery) => {
title = (typeof title === 'string' && title.length > 0) ? title : '';
body = (typeof body === 'string' && body.length > 0) ? body : '';
if (title && body) {
try{
let user = await findFromModel(userModel, userQuery)
return user
}catch(err){
console.log(err); // logs 400
throw err;
}
throw 400;
}
}
return findFromModel(userModel, userQuery)
.catch(err => {console.log(err); throw err;});