gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:49:13 25 4
gpt4 key购买 nike

我是 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');
});

}

我的问题是控制台日志显示所有网站的相同关键字,尽管我在关键字数组中定义了三个。

我错过了什么?

最佳答案

这里直接的问题是 jkeyword 变量在调用回调之前不断变化。

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

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

当您只使用简单数组时,您还可以通过 forEach 使用闭包:

keywords.forEach(function(keyword, j){
...
});

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

关于javascript - 如何确保将正确的参数传递给循环中声明的函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com