Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确保将正确的参数传递给循环中声明的函数调用?_Javascript_Node.js - Fatal编程技术网

Javascript 如何确保将正确的参数传递给循环中声明的函数调用?

Javascript 如何确保将正确的参数传递给循环中声明的函数调用?,javascript,node.js,Javascript,Node.js,我不熟悉node,但我已经喜欢它了。唯一的问题是,异步功能正在折磨我 我正在使用google软件包获取我的网站在google中的排名,如下所示: for (var j=0;j<keywords.length;j++) { var keyword = keywords[j]; google(keyword, function(err, next, links) { console.log('Searching for keyword "' + keyword +

我不熟悉node,但我已经喜欢它了。唯一的问题是,异步功能正在折磨我

我正在使用google软件包获取我的网站在google中的排名,如下所示:

for (var j=0;j<keywords.length;j++) {
    var keyword = keywords[j];

    google(keyword, function(err, next, links) {

    console.log('Searching for keyword "' + keyword + '" in google.' + google.tld + ' ('+ google.lang +')');
      if (err) console.error(err);

      for (var i = 0; i < links.length; ++i) {

        var rank = i+1;

        console.log(keyword + ' #'+ rank + ' - ' + links[i].link + ' | ' + links[i].title);
        //link.href is an alias for link.link
        //console.log(links[i].description + "\n");
      }
      console.log('\n');
    });

}

for(var j=0;j这里的直接问题是
j
关键字
变量在调用回调之前不断变化

一个简单的解决方案是在闭包中保护此变量:

for (var j=0; j<keywords.length; j++) {
    (function(j){
        var keyword = keywords[j];
        ...
    })(j);
}

要处理这类异步问题,您现在应该专注于承诺,这些承诺有助于以更清晰(且更少缩进)的方式构造代码。

这里的直接问题是,
j
关键字
变量在调用回调之前不断变化

一个简单的解决方案是在闭包中保护此变量:

for (var j=0; j<keywords.length; j++) {
    (function(j){
        var keyword = keywords[j];
        ...
    })(j);
}

为了处理这种异步问题,您现在应该深入研究有助于以更清晰(且更少缩进)的方式构造代码的承诺way..

你可以用它作为一个替代品,就像一个符咒一样工作!谢谢!这是有效的,但不是出于说明的原因,因为
j
从来没有在闭包中使用过。它是
关键字
,需要包装在嵌套的函数作用域中。@Marcelocontos在这种情况下,我发现它更清晰,更易于维护,以保护循环变量能行。这是一个设计选择。@rafaelcastrocouto,我会在改进代码时尝试一下,这似乎是一个更符合逻辑的解决方案。谢谢。你可以用它作为替代品。像符咒一样工作!谢谢!这很有效,但不是出于说明的原因,因为
j
从未在闭包中使用过。需要在闭包中包装的是
关键字
嵌套函数作用域。@Marcelocontos在本例中,我发现保护循环变量更清晰、更易于维护。这是一种设计选择。@rafaelcastrocouto,我会在改进代码时尝试一下,这似乎是一种更符合逻辑的解决方案。谢谢。