0

我不知道我问的事情是否有一个术语,所以我将尝试说明它:

我有一个函数,它需要一组联系人,然后循环访问以更新他们在网站上的状态。'something.getStatus' 函数不返回任何内容,但在成功完成后,它会给出用户的状态(在线/离线/等)。

这里的问题是,当调用里面的函数时,变量 user_id 是所有函数调用的数组中的最后一个,因此无法知道如何有什么状态。

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);
 }
}

有什么办法可以“锁定”变量,或者将其传递给内部的函数?

4

2 回答 2

1

将您的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))
}

user_id被传递给匿名自执行函数,这确保具有正确的值

于 2012-08-09T11:23:13.040 回答
0

如果你的脚本不需要兼容 IE <9,你可以这样写:

function gotGroupContacts(contacts) {
  contacts.forEach(function(user_id){
     something.getStatus(user_id, function(resp) {
        updateLinkStatus(user_id, resp.status, resp.statusMessage);
     }, getStatusErrorHandler);
  });
}

注意:forEach 方法可以轻松移植到 IE,请参见:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach

于 2012-08-14T09:24:53.243 回答