javascript - 来自多个来源的 Ajax 请求,包括 google api

标签 javascript html ajax promise jquery-deferred

我遇到了一个问题,正在寻找解决方案。在前端,我尝试显示数据以供用户在 HTML 表格中进行比较。我使用 Ajax 请求从三个数据源获取数据。

数据源1:耗时约8秒 数据源2:耗时~8秒 数据源3:耗时约30秒

我的方法 - Ajax 调用是在函数中进行的,如下所示:-

   function fetchAjax(){
         aggregatedAjaxObj = {}

         ajax.request1(){

    }
       ajax.request2(){

    }
       ajax.request3(){

    }

 //Add all the response in the  aggregatedAjaxObj Object.

}

function render(){

// render the object in the html table & display after a interval of 30 sec
}

正在使用 Node.js、Backbone js 和 Jquery。

如果有更好的方法我很乐意尝试。

最佳答案

您有一个race condition这里还引入了 30 秒的延迟。此外,您还拥有全局状态。

这两者都非常不可靠且糟糕。

假设您不想使用已有的工具引入一个好的 Promise 库(我推荐 bluebird ),可以使用以下方法来完成:

使用 jQuery:

var request1 = $.ajax(...);
var request2 = $.ajax(...);
var request3 = $.ajax(...);
$.when(request1,request2,request3).done(function(results){
    // results contains all 3 request data
    // no delay, will resolve when all 3 are done
    // requests are made simultaneously
    render(results);
});

使用标准 Promise(兼容 Bluebird):

var request1 = $.ajax(...);
var request2 = $.ajax(...);
var request3 = $.ajax(...);
Promise.all(request1,request2,request3).then(function(results){
    // results contains all 3 request data
    // no delay, will resolve when all 3 are done
    // requests are made simultaneously
    render(results);
});

lambda 总是可以去掉,你可以这样做:

Promise.map(["url1","url2","url3"],$.get).all(render);

关于javascript - 来自多个来源的 Ajax 请求,包括 google api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690865/

相关文章:

html - 使用 CSS 旋转

jquery - AJAX loa 之后初始化 jQuery 插件

c# - 方法不允许(http 错误 405)、wcf、rest 服务、post 方法

javascript - 如何设置站点/视口(viewport)的最小宽度,并在宽度低于该宽度时使用浏览器缩放

javascript - 正确使用 JavaScript 接口(interface)关键字

javascript - 在脚本标签中使用 ng-controller 和 text/ng-template

javascript - 范围内的裁剪线

javascript - 无法转到模态轮播中的另一张图片

javascript - 删除内部div时正确调整外部div

asp.net - 在 ASP.Net 中加载用户控件并处理回发