NodeJS回调中的局部变量

时间:2018-01-22 11:27:39

标签: javascript node.js callback

I, 我知道,在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变量的正确方法是什么,所以我如何更新对象以便保存结果?

2 个答案:

答案 0 :(得分:2)

shop位于myOwnService.createCollection函数的父作用域中,因此可以在其中访问。

上述代码中只有问题icallback中使用,它始终是最后一个值,因为它将在事件循环后执行。

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

答案 1 :(得分:0)

应该可以在您尝试访问的位置访问它。如果您正在使用Chrome调试器来查看它是否具有该值,那么Chrome调试器有时会搞砸并显示它不可用。

https://bugs.chromium.org/p/v8/issues/detail?id=3491