在承诺链中处理早期回报的最佳方式是什么?

时间:2015-04-08 21:05:47

标签: javascript promise bluebird

在没有抛出错误的情况下,处理Bluebird早期返回的最佳方法是什么。例如,我有以下条件:

things.find(1)
  .then(function(thing) {
    if (thing.condition === true) {
      return thing
    } else {
      // early return?
    }
  })
  .then(function(thing) {
    return doStuff(thing)
  })

2 个答案:

答案 0 :(得分:4)

一旦.then链形成,其自然行为将逐步完成,因为每个阶段都会结束。

对于"提前回归" (不是一个好词,但我们知道你的意思),你有三个选择:

  • 抛出错误或返回被拒绝的承诺,绕过所有成功处理程序,直到下一次捕获(或链的末尾)
  • 返回保证永远无法解决的承诺 - 例如return new Promise()
  • 响应地撰写.then链(Esailija的回答)

答案 1 :(得分:2)

things.find(1).then(function(thing) {
  if (!thing.condition) return;
  return doStuff(thing)
    .then(...);
    .then(...);
})