javascript - 如何在一个同步块(synchronized block)中异步执行多个ajax调用(jquery)

标签 javascript jquery ajax asynchronous jquery-deferred

我知道如何使用 $.when 一次执行多个 ajax 调用。 例如:

$.when( d1, d2 ).done(function ( v1, v2 ) {
    console.log( v1 ); // "Fish"
    console.log( v2 ); // "Pizza"
})

但是,我想在方法中使用它,以便我可以多次使用它来返回值(例如

function getDataFor(list) {
    var data = [];

    $.when(d1(list), d2(list)).done(function (v1, v2) {
        console.log(v1);
        console.log(v2);

        data = [v1, v2];
    });

    return data;
}

正确的格式是什么?另外,在上面的示例中使用 .then 而不是 .done 基本上没有用,除非我计划在该 promise 之后再有另一个 promise ?

编辑:我不认为这是一个重复的问题。虽然我理解为什么看起来是这样,但我实际上只是想知道是否有一个开箱即用或基于库(例如 jquery/bluebird)的包装器,例如 .NET 的 WaitAll 方法,它采用一组异步方法调用并阻塞线程,直到它们全部完成。我承认这是不可能的,但我不认为这是重复的。

最佳答案

不,一个函数不可能多次返回,并且 it's not possible to return any result variables在ajax请求成功之前。然而,您可以简单地返回结果数组的 promise - 但为此您需要 use then instead of done这样您就可以从回调中返回。 (专业提示:永远不要使用donefail)。

function getDataFor(list) {
    return $.when(d1(list), d2(list)).then(function (v1, v2) {
//  ^^^^^^                            ^^^^
        console.log(v1);
        console.log(v2);

        var data = [v1, v2];
        return data;
//      ^^^^^^
    });
}

关于javascript - 如何在一个同步块(synchronized block)中异步执行多个ajax调用(jquery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673740/

相关文章:

javascript - 弹出窗口关闭后在原始页面中显示 jQuery ajax 变量

javascript - 在 javascript/node.js 中迭代对象数组的有效方法

javascript - 下拉菜单在手机屏幕上不起作用

php - 如何从jquery访问json编码的php数组

python - 如何在网站上显示实时 python 脚本输出?

javascript - 根据过滤后的对象数组中的数据创建新的对象数组

javascript - React 无法识别 DOM 元素上的 `initialValue` 属性

javascript - 使用 Webpack 将 jQuery 暴露给真实的 Window 对象

javascript - Twitter Bootstrap 模式输入字段焦点

javascript - $.ajax提交表单,有时成功有时出错