我想知道是否有一种方法可以创建一个 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/