从要按顺序执行的promise数组创建jquery promise

时间:2013-11-05 14:57:07

标签: javascript jquery

jquery是否支持从一系列promises(或函数)中依次执行promises? 例如,

假设我已经定义了这个函数

function wait(/*args*/){
    var complete = $.Deferred();
    var args = arguments;
    setTimeout(function(){
        console.log(args);
        //arguments are applied to show that the functionality should
        //pass arguments between promises in sequence.
        complete.resolve.apply(null,args);
    }, 1000);
    return complete.promise();
}

我可以轻松地将这些链接在一起形成一个新的承诺,如下:

var sequencePromise = wait("first")
.then(wait.bind(null,"second"))
.then(wait.bind(null,"third"));

然而,我经常有一系列的序列承诺,或者也许它们是我正在编写的变量列表,所以我正在寻找一种方法来轻松地做类似的事情:

var sequence = [
    wait("first"),
    wait.bind(null,"second"),
    wait.bind(null,"third")];

var sequencePromise = $.whenInSeq(sequence)

最好,我正在寻找一个不是很大依赖的解决方案(如果我只是错过了jquery api中的内容,那将是理想的)。在我推出自己的东西之前,我想要确认一些不存在的东西。

1 个答案:

答案 0 :(得分:4)

试试这个(未经测试):

var sequence = [
    wait("first"),
    wait.bind(null,"second"),
    wait.bind(null,"third")];

var s = sequence[0];
for (var i = 1; i < sequence.length; i++) {
  s = s.then(sequence[i]);
}
s.done(function () {alert('done!')})