gpt4 book ai didi

javascript - jQuery Deferred/Promises 与许多 getJSON

转载 作者:行者123 更新时间:2023-11-29 18:19:27 25 4
gpt4 key购买 nike

我正在尝试了解有关 jquery 延迟/ promise 的更多信息。我有点理解你什么时候想做 1 个 ajax 调用,但是一起做多个(x 号)ajax 调用呢?这是我正在尝试做的事情的 jsfiddle:http://jsfiddle.net/vRJ7v/

例如(使用 lastFM api):

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 ,而不是一组 promise 。如果您希望使用数组,则必须使用 .apply 以便将 promise 数组正确地应用于 .when 方法。

$.when.apply($,myArrayOfPromises).done(...

此外,$.when 返回一个 promise,因此您无需生成另一个 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/

关于javascript - jQuery Deferred/Promises 与许多 getJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com