如何跳过一些 then in promise(bluebird)?

How to skip some then in promise(bluebird)?

示例代码:

Queues.findOne({_id: id})
.then(function(q) {
 var status = q.status;   
 //...
}).then(function(q) {
// A
}).then(function(q) {
// B
}).then(function(q) {
// C
}).then(function(q) {
// D
}).then(function(q) {
// E
}).then(function(q) {
// F
})

状态不同,流程不同

如果状态为1A/B/C/D/E/F应该全部执行。

如果status为2,应该执行C/D/E/F,如何跳过AB

如果状态是3,应该执行E/F,如何跳过A/B/C/D

您可以使用

Queues.findOne({_id: id}).then(function(q) {
  var status = q.status;
  var x = Promise.resolve();
  var y = status <= 1 ? x.then(A).then(B) : x;
  var z = status <= 2 ? x.then(C).then(D) : y;
  return z.then(E).then(F);
}