Javascript 如何让承诺摆脱长链?
我想分离我的代码逻辑。而且长链有点难以控制的条件 我编写了一个测试代码:Javascript 如何让承诺摆脱长链?,javascript,promise,q,Javascript,Promise,Q,我想分离我的代码逻辑。而且长链有点难以控制的条件 我编写了一个测试代码: 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(50
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
我做错了什么吗?您必须将then链接起来,以便在返回的承诺中调用then:
p = f(500, 0);
p.then(function() {
return f(300, 1);
}).then(function() {
return f(100, 2);
});
传递承诺没有问题,这是您在返回承诺时已经做的。您必须链接then,以便在返回的承诺上调用then:
p = f(500, 0);
p.then(function() {
return f(300, 1);
}).then(function() {
return f(100, 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);
});
你需要把承诺连成链:
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);
});
如果我想分离我的代码逻辑呢。或者我会得到一条长长的链条。有什么好办法吗?你从p回来的承诺。。。可以作为参数传递,并从其他点链接。你也可以把它们筑巢。我经常做这种事。当然,拥有一个长链是没有问题的。如果我想分离我的代码逻辑呢。或者我会得到一条长长的链条。有什么好办法吗?你从p回来的承诺。。。可以作为参数传递,并从其他点链接。你也可以把它们筑巢。我经常做这种事。当然,拥有一条长长的链条是没有问题的。