promise - Q Promises - 创建动态 promise 链然后触发它

标签 promise q

我想知道是否有一种方法可以创建一个 promise 链,我可以基于一系列 if 语句构建该 promise 链,并在最后以某种方式触发它。例如:

// Get response from some call
callback = (response) {
    var chain = Q(response.userData)

    if (!response.connected) {
        chain = chain.then(connectUser)
    }

    if (!response.exists) {
        chain = chain.then(addUser)
    }

    // etc...

    // Finally somehow trigger the chain
    chain.trigger().then(successCallback, failCallback)
}

最佳答案

promise 代表已经开始的操作。您无法 trigger() promise 链,因为 promise 链已经在运行。

虽然您可以通过创建延迟然后对其进行排队并最终在稍后解决它来解决此问题 - 但这并不是最佳选择。如果您从最后一行删除 .trigger ,我怀疑您的任务将按预期工作 - 唯一的区别是它将对操作进行排队并启动它们而不是等待:

var q = Q();
if(false){
    q = q.then(function(el){ return Q.delay(1000,"Hello");
} else {
    q = q.then(function(el){ return Q.delay(1000,"Hi");
}
q.then(function(res){
      console.log(res); // logs "Hi"
});

这里的要点是:

  • Promise 代表已经开始的操作。
  • 您可以将 .then 处理程序附加到 Promise,即使它已解决,它仍然会按预期执行。

祝你好运,编码愉快

关于promise - Q Promises - 创建动态 promise 链然后触发它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621739/

相关文章:

javascript - Promise 响应参数丢失

javascript - 在 Jest 中测试 Promises 的最佳方式

javascript - nodejs Q.all promise 函数调用自身

javascript - Angular $q在http请求之前执行 "then"

javascript - Q.js - 如何访问缓存的元素

javascript - 未使用延迟[反]模式的情况下尚未创建的 promise 的 promise

validation - 自定义异步 vue-validator 破坏验证组件

javascript promise 不传递所有参数(使用 Q)

javascript - Q.all 没有以正确的顺序解析

node.js - EventEmitter 位于 Promise 链的中间