javascript中的承诺(ES6)

时间:2017-04-05 09:07:52

标签: javascript ecmascript-6 passport.js es6-promise

如何将承诺reject()错误从500更改为200,状态代码为ok?

总是当我试图拒绝某些情况下我在前端得到500错误。

export default function login(req, res) {
return new Promise((resolve, reject) => {
passport.authenticate( 'local', function authenticate(err, user, info){
  if(err)  reject(err);
  if(!user) reject(info);

  req.logIn(user, err, info => {
    if(err) { reject(err) }
    else {
      resolve(user);
    }
  })
})(req, res);
});
}

错误:Status Code:500 Internal Server Error

2 个答案:

答案 0 :(得分:2)

500是HTTP错误,不是由您的承诺生成的,而是从您的服务器返回的内容。

如果您想避免500错误,最好的解决方案是弄清楚为什么你在后端获得该错误并在那里修复它,因为500通常意味着抛出未捕获的异常。

但是,如果您想假装一切正常,可以忽略代码中的500错误并返回不是生成错误的内容:

if (err)
  reject(true);

然后在Promise的catch区块中,您可以:

login(...)
  .catch(function(e) {
    if (e === true)
      // pretend everything is okay
    else
      ...
  })

答案 1 :(得分:0)

如果你拒绝,那么状态代码不应该是200 OK,但如果你想这样做, 你需要在发回回复之前做到这一点,

下面,

res.status(200).send('Something broke!');