Node.js打破了承诺链

时间:2017-05-23 09:17:53

标签: node.js promise

我试图通过不在其中一个中间步骤返回承诺来打破承诺链。

identity
.token(username, password)
})
.then((response) => {
  // Here I would like to break the promise chain.. HELP please..
  if (!token.tfa || !allow2FA)
    return res.status(200).json(token.raw);

  return twoFactor.generateLoginOtc(username, token);
})
.then((response) => {
  return res.status(204).json();
})
.catch((error) => {
  console.log(error);
  return res.status(error.status).json(error);
});

2 个答案:

答案 0 :(得分:2)

你不能以一种很好的方式打破承诺链,但你可以嵌套它们:

identity.token(username, password).then(response => {
  if (!token.tfa || !allow2FA) {
    return res.status(200).json(token.raw);
  }
  return twoFactor.generateLoginOtc(username, token).then(response => {
    return res.status(204).json();
  })
}).catch(error => {
  console.log(error);
  return res.status(error.status).json(error);
});

答案 1 :(得分:-1)

要打破承诺链,而不是return,您需要throw某些东西 - 通常是错误。

.then((response) => {
  if (!token.tfa || !allow2FA) {
    res.status(200).json(token.raw);

    // throw error here
    throw new Error('Error message');
  }

  return twoFactor.generateLoginOtc(username, token);
})
.then((response) => {
  return res.status(204).json();
})
.catch((error) => {
  console.log(error);
  return res.status(error.status).json(error);
});