jQuery当(...)。done(a,b,c)没有展开结果

时间:2014-02-26 19:57:15

标签: jquery promise jquery-deferred

我正在使用when()来组合承诺。我正在寻找一种方法,就像done()一样 结合承诺,具有以下特征:

    如果所有承诺都已解决(未被拒绝/错误),则
  • 仅调用回调
  • 将组合中每个承诺传递给resolveWith的结果按顺序发送给我,但是展开 - 而不是每个分辨率的[result, "success", ...]数组

这样的事情是否存在?

3 个答案:

答案 0 :(得分:1)

  

这样的事情是否存在?

不,但您可以使用arguments objectapply自行编写:

function whenAllThenEach(promises, callback) {
    $.when.apply($, promises).then(function() {
        return $.map(arguments, function(args) {
            return callback.apply(null, args);
        });
    });
}

答案 1 :(得分:0)

类似的东西:

$.when(something1, something2).then(thenyoudosomething).done(function(){
      // the results from what you use .then
})

答案 2 :(得分:0)

是的,它叫做。然后。你可以使用.then来处理参数并返回一个新的deferred,它是用你认为合适的参数解析的。

function ajax(n) {
    return $.Deferred(function(def){
        def.resolve(n,"success",{responseText:n});
    }).promise();
}

$.when(ajax(1),ajax(2),ajax(3)).then(function(a,b,c){
    return $.Deferred().resolve(a[0],b[0],c[0]);
}).done(function(a,b,c){
    console.log(a,b,c); // 1 2 3
})

http://jsfiddle.net/2rn3e/1/