我有一个运行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行并解析数据。感谢任何帮助,非常感谢!!!
答案 0 :(得分:4)
问题是您的异步函数正在捕获对steamid
的引用,并且该值会随着for
循环的继续而更改。相反,您需要捕获steamid
的值并确保该值对您的回调是本地的。您可以使用IIFE.
for (var i = 0; i < rows.length; i++) {
(function(steamid) {
userinfo.getUserName(steamid, function(name) {
...
});
})(rows[i].steamid);
}