我怎么能一个接一个地解雇承诺呢?
waitFor(t),是一个返回在t时间后解析的promise的函数.我希望能做的是:
waitFor(1000) Then when finished, console.log('Finished wait of 1000 millis') then
waitFor(2000) Then when finished, console.log('Finished wait of 2000 millis') then
waitFor(3000) Then when finished, console.log('Finished wait of 3000 millis')
这是我尝试过的:
waitFor(1000).then(function(resolve, reject) {
console.log(resolve);
}).then(waitFor(2000).then(function(resolve, reject) {
console.log(resolve);
})).then(waitFor(3000).then(function(resolve, reject) {
console.log(resolve);
}));
不幸的是,这个console.logs语句每隔1秒接一次,这意味着所有的一次调用的承诺.
我设法用这样的回调解决了这个问题,但这使得一切都变得非常丑陋:
waitFor(1000).then(function(resolve, reject) {
console.log(resolve+' @ '+(new Date().getSeconds()));
waitFor(2000).then(function(resolve, reject) {
console.log(resolve+' @ '+(new Date().getSeconds()));
waitFor(3000).then(function(resolve, reject) {
console.log(resolve+' @ '+(new Date().getSeconds()));
});
});
});
那么我应该怎么做才能使它工作的承诺,但却没有使用丑陋的回调地狱?
不理想的结果:http://jsfiddle.net/nxjd563r/1/
期望的结果:http://jsfiddle.net/4xxps2cg/
解决方法:
我找到了你的解决方案
然后你需要让每个人都返回一个新的诺言,这样下一次就可以在前一个答案得到解决后做出反应.
waitFor(1000).then(function(result) {
$('#result').append(result+' @ '+(new Date().getSeconds())+'<br>');
return waitFor(2000);
}).then(function(result) {
$('#result').append(result+' @ '+(new Date().getSeconds())+'<br>');
return waitFor(3000);
}).then(function(result) {
$('#result').append(result+' @ '+(new Date().getSeconds())+'<br>');
});
jsfiddle http://jsfiddle.net/4xxps2cg/2/