【发布时间】:2017-02-07 17:26:03
【问题描述】:
有没有办法使用其他解决方案使这个更优雅(jquery 很好)?
在我的情况下重要的是,只有在先前的执行被终止时才会触发相应的执行。
seqExe(["item one", "item two", "item three", "item four", "item five"])
function seqExe(corpus) {
var i = -1,
len = corpus.length,
defer = jQuery.Deferred(),
promise = defer.promise();
while(++i < len) {
promise = promise.then((function(item) {
return function() {
console.log(item);
return foo(item);
}
}).call(this, corpus[i]));
}
promise.then(function() {
console.log("Done");
}, function() {
console.error("Failed");
});
return defer.resolve();
}
function foo(item) {
var defer = jQuery.Deferred();
window.setTimeout(
function() {
defer.resolve()
console.log(item);
}, Math.random() * 2000 + 1000);
return defer.promise();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
假设的输出应该是:
item one
item one
item two
item two
item three
item three
item four
item four
item five
item five
Done
【问题讨论】:
标签: javascript jquery promise deferred