jQuery,同时 ajax 调用和 $.when

标签 jquery ajax promise

当使用 $.ajax().done 时,目前,您可以做一些巧妙的事情,例如:

$.getJSON('url').done(myFn);
$.getJSON('url2').done(myFn2);

但是当你使用 $.when 进行相同的 2 个 ajax 调用时,你需要执行一个“奇怪”的事情

$.when($.getJSON('url'), $.getJSON('url2')).done(function(res1, res2) {
    myFn(res1[0], res1[1], res1[2]);
    myFn2(res2[0], res2[1], res2[2]);
});

有没有办法做这样的事情:

$.when($.getJSON('url'), $.getJSON('url2')).done(myFn, myFn2);

也就是说,当您将多个函数传递给完成时,它们会以相同的顺序针对每个参数进行解析?

编辑:这里有来 self 想要的用例的更多信息:

$.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();
    });

最佳答案

you are required to perform a "strange" thing

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

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

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]);

关于jQuery,同时 ajax 调用和 $.when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026209/

相关文章:

Javascript - 将 this 参数绑定(bind)到 Promise

jquery - 使用 Ajax 调用跨域登录用户?

javascript - 什么会导致 Bootstrap 在我的文档中插入额外的元素?

javascript - 如何在不重新加载页面的情况下获取 PHP 文件中的 javascript 数据

ajax - 通过ajax调用调用XPage

Dart Future 和明确的解决、拒绝

javascript - 异步 Mocha 测试如何在不返回 promise 或调用完成回调的情况下解决

jquery - HTML 列表框换行文本

javascript - jstree中如何获取被点击的对象

php - AJAX 到达底部时无法加载更多数据