2013-12-19 55 views
2

我有一个问题,它试图找到一个解决方案。在前端尝试显示用户要在HTML表格中比较的数据。有三个数据源使用Ajax请求从中获取数据。来自多个来源的Ajax请求,包括谷歌API a

数据源1:所用的时间〜25秒钟 数据源2:时间采取〜8秒 数据源3:所用的时间〜30秒

我Approach-的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,骨干JS & jQuery的。

如果还有什么更好的方法会喜欢尝试一下。

回答

2

这里有一个race condition以及引入30秒延迟。此外,你有全球性的国家。

这些都是真的不可靠和不好。

使用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); 
}); 

使用

假设你不希望引入一个良好的诺言库使用你已经可以用做工具(我建议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); 
}); 

拉姆达总能逃脱,你可以这样做:

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

Ohh cool,Benjamin。谢谢。另外我想知道的一件事是,我正在考虑一种方法,在Node.js服务器中创建3个Ajax请求,聚合数据,然后在前端创建一个Ajax调用。 – Vivek

+0

这也是一个可行的解决方案,但是这对服务器来说是额外的负担 - 如果这对你来说比这个方法还好,也是可以的。 –

+0

感谢您的回复。 – Vivek