Javascript 在异步函数中维护变量的状态
我不知道我所问的事情是否有一个术语,所以我将尝试举例说明: 我得到了一个函数,它接收一系列联系人,并通过循环更新他们在网站上的状态。“something.getStatus”函数不返回任何内容,但成功完成后,它会给出用户的状态(在线/离线等) 这里的问题是,当调用内部函数时,变量user_id是数组中所有函数调用的最后一个变量,因此不可能知道如何拥有什么状态Javascript 在异步函数中维护变量的状态,javascript,dojo,sametime,Javascript,Dojo,Sametime,我不知道我所问的事情是否有一个术语,所以我将尝试举例说明: 我得到了一个函数,它接收一系列联系人,并通过循环更新他们在网站上的状态。“something.getStatus”函数不返回任何内容,但成功完成后,它会给出用户的状态(在线/离线等) 这里的问题是,当调用内部函数时,变量user_id是数组中所有函数调用的最后一个变量,因此不可能知道如何拥有什么状态 function gotGroupContacts(contacts) { for ( i = 0; i < contacts.
function gotGroupContacts(contacts) {
for ( i = 0; i < contacts.length; i++) {
var user_id = contacts[i];
something.getStatus(user_id, function(resp) {
updateLinkStatus(user_id, resp.status, resp.statusMessage);
}, getStatusErrorHandler);
}
}
功能gotGroupContacts(联系人){
对于(i=0;i
是否有任何方法可以“锁定”变量,或将其传递给函数?将您的
getStatus
方法调用封装在闭包中,如下所示
for ( i = 0; i < contacts.length; i++) {
var user_id = contacts[i];
(function(uid) {
something.getStatus(uid, function(resp) {
updateLinkStatus(uid, resp.status, resp.statusMessage);
}, getStatusErrorHandler);
}(user_id))
}
(i=0;i{
var user_id=联系人[i];
(功能(uid){
getStatus(uid,function(resp){
更新状态(uid、相应状态、相应状态消息);
},getStatusErrorHandler);
}(用户识别号)
}
user\u id
被传递到匿名自执行函数中,这将确保具有正确的值如果您的脚本不需要与IE在闭包时读取兼容,这将给您带来好处!哇,谢谢!虽然看起来有点凌乱,但它确实有效。
function gotGroupContacts(contacts) {
contacts.forEach(function(user_id){
something.getStatus(user_id, function(resp) {
updateLinkStatus(user_id, resp.status, resp.statusMessage);
}, getStatusErrorHandler);
});
}