jQuery Deferred/Promises with many getJSON
jQuery Deferred/Promises with many getJSON
我正在尝试了解更多关于jquery递延/承诺的信息。我有点理解你什么时候想做一个ajax调用,但把多个(x个)ajax调用放在一起怎么样?以下是我想要做的事情:http://jsfiddle.net/vRJ7v/
例如(使用lastFMapi):
var last_fm_url = 'http://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=';
var apiKey = //my lastfm api key;
var user_list = ['user1','user2'.....'userX'];
var getTracks = function( user ){
var dfd, last_fm_url;
dfd = $.Deferred();
last_fm_url = last_fm_url + user + '&limit=10&period=3month&api_key='+ apiKey +'&format=json';
$.getJSON( last_fm_url ).done(function( results ) {
dfd.resolve();
}).fail(function( error ) {
dfd.reject();
});
return dfd.promise();
};
var fetchMultipleTracks = function(){
var dfd, user_list_count, promises = [];
var dfd = $.Deferred();
user_list_count = user_list.length;
for(var i = 0; i < user_list_count; i++ ){
promises.push( getTracks(user_list[ i ]) );
}
$.when( promises ).done(function(results){
dfd.resolve();
});
return dfd.promise();
};
var test = fetchMultipleTracks();
test.done(function( results ){
console.log( results );
}, function( error ){
// error
});
但我似乎无法返回实际结果,它只是返回http://d.pr/i/N5Yi
$.when
每个参数接受一个promise,而不是一个promises数组。如果要使用数组,则必须使用.apply
,以便将promise数组正确应用于.when
方法。
$.when.apply($,myArrayOfPromises).done(...
此外,$.when
返回一个promise,因此您不需要生成另一个。
var fetchMultipleTracks = function(){
var user_list_count, promises = [];
user_list_count = user_list.length;
for(var i = 0; i < user_list_count; i++ ){
promises.push( getTracks(user_list[ i ]) );
}
return $.when.apply($, promises );
};
若要处理结果,请对参数数组进行迭代。
get_tracks.done(function(){
$.each(arguments,function(i,result) {
console.log(result)
outputTracksToDom(result.toptracks.track);
});
}).fail(function(error ){
// handle error
});
http://jsfiddle.net/vRJ7v/1/
相关文章:
- 如何将getJson的响应保存在全局变量中
- 使用本地文件而不是$.getJSON
- jQuery.getJSON失败,语法错误
- 带有Spring的$.getJSON未执行回调
- jQuery$.getJSON抛出意外令牌
- ASP.Net AJAX$GetJson函数获胜'不要被处决
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- 为什么有些jQuery程序员使用像$.get、$.getJSON和$.when这样的jQuery函数来代替$.ajax
- 在ruby on rails中使用jquery getJSON获取数据
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 如何使用pass参数从jQuery.getJSON获取回调
- 可以't通过$getJSON上传参数使用js.coffee
- 使用$.getJSON循环遍历数组
- 在Flask中使用.getJSON请求时,只运行一次命令
- Jquery将循环变量绑定到getJSON函数
- SailsJS One To Many自v0.11.0以来不起作用
- 试图封装$.getJSON和RequireJS
- 当站点不是其URL的根时,如何在getJSON调用中定位API
- 在jquery中等待getJSON完成的回调
- jQuery Deferred/Promises with many getJSON