for循环中函数回调的问题

时间:2016-03-22 22:24:03

标签: javascript callback

我有一个运行for循环的函数,然后在完成后回调for循环的结果。我的问题是在这个for循环函数中我有两个函数背靠背有回调,它们需要大约半秒才能完成(可能更少)。当我使用适当的数据进行调用时,我的结果数组在完成后被回调,但是当用户名是唯一的时,图片是相同的,这不是我想要的。我相信这与JS试图异步有关但它只是打破了。这是我的代码:

function forCallback(rows, callback){
  var done = 0;
  for(i = 0 ;i < rows.length; i++){
    var steamid = rows[i].steamid;
    userinfo.getUserName(steamid, function(name){
        userinfo.getUserPicture(steamid, function(picture){
        results.push({
          name: name,
          picture: picture
        })
        done++;
        console.log("Queried " + done + " username(s)")
        if(done == (rows.length)){
          callback(results);
        }
      });
   });
  }
}

如果你想知道的话,该函数会接收sql行并解析数据。感谢任何帮助,非常感谢!!!

1 个答案:

答案 0 :(得分:4)

问题是您的异步​​函数正在捕获对steamid的引用,并且该值会随着for循环的继续而更改。相反,您需要捕获steamid的值并确保该值对您的回调是本地的。您可以使用IIFE.

执行此操作
for (var i = 0; i < rows.length; i++) {
  (function(steamid) {
    userinfo.getUserName(steamid, function(name) {
      ...
    });
  })(rows[i].steamid);
}