jQuery,同时调用ajax和$.when

jQuery,同时调用ajax和$.when,jquery,ajax,promise,Jquery,Ajax,Promise,在使用$.ajax().done时,目前您可以做一些简单的事情,如: $.getJSON('url').done(myFn); $.getJSON('url2').done(myFn2); 但是当您使用$时,当使用相同的两个ajax调用时,您需要执行一个“奇怪”的操作 有没有一种方法可以做到: $.when($.getJSON('url'), $.getJSON('url2')).done(myFn, myFn2); 也就是说,当您将多个函数传递给done时,它们将按相同的顺序为每个参数解析

在使用$.ajax().done时,目前您可以做一些简单的事情,如:

$.getJSON('url').done(myFn);
$.getJSON('url2').done(myFn2);
但是当您使用$时,当使用相同的两个ajax调用时,您需要执行一个“奇怪”的操作

有没有一种方法可以做到:

$.when($.getJSON('url'), $.getJSON('url2')).done(myFn, myFn2);
也就是说,当您将多个函数传递给done时,它们将按相同的顺序为每个参数解析

编辑:下面是我希望的用例中的更多信息:

$.when($.getJSON('tweets'), $.getJSON('users'))
    .done(rememberTweets, rememberUsers)
    .done(displayTweetsWithUsers)
目前,我确实:

var tweets, users;
$.when($.getJSON('tweets'), $.getJSON('users'))
    .done(function(tweetsRes, usersRes) { 
         tweets = tweetsRes[0]; 
         users = usersRes[0];
         displayTweetsWithUsers();
    });
你被要求做一件“奇怪”的事

不是,我认为你的语法很好地表达了你正在做的事情。如果你认为应该有一个速记-不,没有,因为你想做的是奇怪的(一个不寻常的用例)

如果您需要此的通用版本,请使用

function zipMapper(fns) {
    return function() {
        var args = arguments;
        return fns.map(function(f, i) {
            return args[i].length ? f.apply(this, args[i]) : f.call(this, args[i]);
        }, this);
    };
}

$.when($.getJSON('url'), $.getJSON('url2')).then(zipMapper([myFn, myFn2]);

你的问题对我来说毫无意义。您的意思是不想等待两个请求都完成,而是分别启动它们的
.done()
回调?那么为什么要使用
$。when
?在我的例子中,我希望:$.when($.getJSON('url'),$.getJSON('url2')).done(myFn,myFn2).done(myContinuationFn);也就是说,myFn和myFn2正在为myContinuationFn记住数据,但我希望将其与数据处理分开。现在有意义了吗?您当前的代码看起来一团糟。为什么要使用全局
推文
用户
变量,为什么不向该显示函数传递任何信息?不完全是好的做法。Thé变量的作用域是用于jqury插件的闭包。所以这些变量被其他方法使用。。。
function zipMapper(fns) {
    return function() {
        var args = arguments;
        return fns.map(function(f, i) {
            return args[i].length ? f.apply(this, args[i]) : f.call(this, args[i]);
        }, this);
    };
}

$.when($.getJSON('url'), $.getJSON('url2')).then(zipMapper([myFn, myFn2]);