我想分开我的代码逻辑。长链很难被条件控制。
我写了一个测试代码:
var Q, f, p;
Q = require('q');
f = function(t, info) {
var deferred = Q.defer();
setTimeout(function() {
console.log(info);
return deferred.resolve();
}, t);
return deferred.promise;
};
p = f(500, 0);
p.then(function() {
return f(300, 1);
});
p.then(function() {
return f(100, 2);
});
我希望结果是:
0
1
2
但我总是得到:
0
2
1
我有什么问题吗?
答案 0 :(得分:3)
您必须将then
链接起来,以便在返回的承诺上调用then
:
p = f(500, 0);
p.then(function() {
return f(300, 1);
}).then(function() {
return f(100, 2);
});
传递承诺没有问题,这是你已经做过的事情(f
会回复承诺)。
答案 1 :(得分:2)
你需要链接承诺:
p = f(500, 0);
p = p.then(function() {
return f(300, 1);
});
p = p.then(function() {
return f(100, 2);
});
或更具惯用性:
f(500, 0).then(function() {
return f(300, 1);
}).then(function() {
return f(100, 2);
});