Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待所有循环结果_Javascript_Jquery_Last.fm - Fatal编程技术网

Javascript 等待所有循环结果

Javascript 等待所有循环结果,javascript,jquery,last.fm,Javascript,Jquery,Last.fm,我循环遍历一个数组并调用函数“getTopTracks”,它发出json请求(使用LastFM包装插件)。然后我将这些信息存储在一个新的数组“tracks_all”中 在使用“tracks\u all”数组之前,如何等待每个API调用的结果完成 //last.fm用户名数组 var user_list=['user1','user2','etc']; //获得顶级曲目 var getTopTracks=函数(用户,回调){ var last_fm; last_fm=新的LastFM({ apiK

我循环遍历一个数组并调用函数“getTopTracks”,它发出json请求(使用LastFM包装插件)。然后我将这些信息存储在一个新的数组“tracks_all”中

在使用“tracks\u all”数组之前,如何等待每个API调用的结果完成

//last.fm用户名数组
var user_list=['user1','user2','etc'];
//获得顶级曲目
var getTopTracks=函数(用户,回调){
var last_fm;
last_fm=新的LastFM({
apiKey://apiKey,
apiSecret://apiSecret
});
//last.fm api的方法
last_fm.user.getTopTracks({
用户:用户,,
句号:/句号,
限制轨道数
}, {
成功:功能(数据){
无功跟踪;
track_arr=data.toptracks.track;
回叫(跟踪arr);
},
错误:函数(代码、消息){}
});
};
var newFetch=函数(){
变量用户列表,
我
跟踪_all=[];
user\u list\u len=user\u list.length;
对于(i=0;i
由于您知道函数
getTopTracks
将执行多少次,因此可以使用计数器跟踪还有多少次执行
getTopTracks

newFetch()
中:

var newFetch=函数(){
变量用户列表,
我
跟踪_all=[];
user\u list\u len=user\u list.length;
var cpt=user_list.length;//N左执行
对于(i=0;i调用最终回调函数
}
});
}
};

这是
承诺
风格,使用

// array of last.fm usernames
var user_list = ['user1', 'user2','etc'];

// get top tracks
var getTopTracks = function( user ){
  var last_fm;
  var deferred = when.defer();

  last_fm = new LastFM({
    apiKey    : //apikey,
    apiSecret : //apiSecret
  });

  // method of last.fm api
  last_fm.user.getTopTracks({
    user   : user,
    period : //period,
    limit  : //num of tracks
  }, {
    success: function( data ){
      var track_arr;
      track_arr = data.toptracks.track;
      deferred.resolve(track_arr);
    },
    error: function( code, message ){
      deferred.reject(code);
    }
  });

  return deferred.promise();
};

var newFetch = function(){
  var deferred = when.defer();
  var promises = [];
  user_list.forEach(function(user){
    promises.push(getTopTracks(user));
  });

  when.all(promises, function(results){
    // results will be an array of track_arr
    deferred.resolve(results);
  }, function(error){
    deferred.reject(error);
  });

  return deferred.promise;
};

// What I want to do is something like...
var get_tracks = newFetch();

get_tracks.done(function(results){
  // results will be an array of track_arr
}, function(error){
  // handle error
});
这是使用
async

// array of last.fm usernames
var user_list = ['user1', 'user2','etc'];

// get top tracks
var getTopTracks = function( user, callback ){
  var last_fm;
  var deferred = when.defer();

  last_fm = new LastFM({
    apiKey    : //apikey,
    apiSecret : //apiSecret
  });

  // method of last.fm api
  last_fm.user.getTopTracks({
    user   : user,
    period : //period,
    limit  : //num of tracks
  }, {
    success: function( data ){
      var track_arr;
      track_arr = data.toptracks.track;
      callback(null, track_arr)
    },
    error: function( code, message ){
      callback(code);
    }
  });
};

var newFetch = function(callback){
  var functions = [];
  user_list.forEach(function(user){
    functions.push(getTopTracks(user));
  });

  async.parallel(functions, callback);
};

// What I want to do is something like...
newFetch(function(error, results){
  // results will be an array of track_arr
});

更新语法

您可以使用延迟,请参见此处,并在使用这些延迟时使用
:不确定如何将其连接到我的代码。有什么帮助吗?谢谢。当我尝试使用“When.defer()”时,它返回一个错误:Uncaught ReferenceError:When未定义您需要从这里手动包括
When
library<代码>异步
可在此处找到
// array of last.fm usernames
var user_list = ['user1', 'user2','etc'];

// get top tracks
var getTopTracks = function( user ){
  var last_fm;
  var deferred = when.defer();

  last_fm = new LastFM({
    apiKey    : //apikey,
    apiSecret : //apiSecret
  });

  // method of last.fm api
  last_fm.user.getTopTracks({
    user   : user,
    period : //period,
    limit  : //num of tracks
  }, {
    success: function( data ){
      var track_arr;
      track_arr = data.toptracks.track;
      deferred.resolve(track_arr);
    },
    error: function( code, message ){
      deferred.reject(code);
    }
  });

  return deferred.promise();
};

var newFetch = function(){
  var deferred = when.defer();
  var promises = [];
  user_list.forEach(function(user){
    promises.push(getTopTracks(user));
  });

  when.all(promises, function(results){
    // results will be an array of track_arr
    deferred.resolve(results);
  }, function(error){
    deferred.reject(error);
  });

  return deferred.promise;
};

// What I want to do is something like...
var get_tracks = newFetch();

get_tracks.done(function(results){
  // results will be an array of track_arr
}, function(error){
  // handle error
});
// array of last.fm usernames
var user_list = ['user1', 'user2','etc'];

// get top tracks
var getTopTracks = function( user, callback ){
  var last_fm;
  var deferred = when.defer();

  last_fm = new LastFM({
    apiKey    : //apikey,
    apiSecret : //apiSecret
  });

  // method of last.fm api
  last_fm.user.getTopTracks({
    user   : user,
    period : //period,
    limit  : //num of tracks
  }, {
    success: function( data ){
      var track_arr;
      track_arr = data.toptracks.track;
      callback(null, track_arr)
    },
    error: function( code, message ){
      callback(code);
    }
  });
};

var newFetch = function(callback){
  var functions = [];
  user_list.forEach(function(user){
    functions.push(getTopTracks(user));
  });

  async.parallel(functions, callback);
};

// What I want to do is something like...
newFetch(function(error, results){
  // results will be an array of track_arr
});