This question already has answers here:
Javascript infamous Loop issue? [duplicate]
                                
                                    (5个答案)
                                
                        
                2年前关闭。
            
        

一世,
我知道,关于SO的信息很多,但是我找不到适合自己情况的正确答案。

我有这段代码:

for(var i=0; i < shop.collections.length; i++){
  if(!shop.collection[i].active){
    var data = {
      name: shop.collection[i].name,
      visible: true
    };

    myOwnService.createCollection(data, accessToken, function(err, response, body){
      shop.collections[i].serviceId = body.id;
  })
}


我的问题是在shop服务中未定义myOwnService.createCollection()。在回调中访问shop变量的正确方法是什么,那么如何更新对象以保存结果?

最佳答案

shopmyOwnService.createCollection函数的父范围内,因此可以在其中访问。

上面代码中唯一的问题是在i中使用callback,因为事件循环后将执行该值,所以它始终是最后一个值。

IIFE周围使用myOwnService.createCollection包装器,以便可以传递i的范围。



for (var i = 0; i < shop.collections.length; i++) {
  if (!shop.collection[i].active) {
    var data = {
      name: shop.collection[i].name,
      visible: true
    };
    (function(i) {
      myOwnService.createCollection(data, accessToken, function(err, response, body) {
        shop.collections[i].serviceId = body.id;
      });
    })(i);
  }
}

关于javascript - 回调中的NodeJS局部变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48380537/

10-13 09:07