javascript - 如何在promise(bluebird)中跳过一些then?

标签 javascript node.js 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
})

根据状态,流程会有所不同

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

如果状态为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);
}

关于javascript - 如何在promise(bluebird)中跳过一些then?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43910472/

相关文章:

node.js - NodeJS : Promise won't catch thrown exceptions

javascript - 新手项目 - 从 BroadcastReceive 开始一个 Activity

javascript - 在 c++ 和 node.js(服务器)之间建立套接字通信的困难

javascript - 破坏 promise 链并根据链中被破坏的步骤调用函数(拒绝)

javascript - svelte:svelte 如何在 if block 之间运行函数?

javascript - 同步 Sequelize 模型 : sequelize. import() 不是函数(并且已弃用)

javascript - 最外面的 .catch() 是否适用于所有链式/嵌套式 Promise?

javascript - 检查 'mousewheel' 事件方向并锁定滚动

javascript - 如何删除 parse.com 中的特定行?

javascript - 当我将鼠标悬停在“产品”菜单上时,此代码需要进行哪些更改以提供正确的外观?