Javascript 我如何在多重承诺中传递错误?

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: 履行承诺:

因此,基本上我试图通过传递一个错误值来创建一个错误处理程序,在我的例子中,这个错误值是一个状态代码的数字,比如400、500等等。 现在的问题是当
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;});