我是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'); }); }
我的问题是,尽管我在关键字数组中定义了三个,但控制台日志为所有网站显示了相同的关键字。
我想念什么?
这里的直接问题是,j和keyword变量在调用回调之前会不断变化。
j
keyword
一个简单的解决方案是在闭包中保护此变量:
for (var j=0; j<keywords.length; j++) { (function(j){ var keyword = keywords[j]; ... })(j); }
当您仅使用简单数组时,还可以通过forEach以下方式使用闭包:
forEach
keywords.forEach(function(keyword, j){ ... });
为了处理这种异步问题,您现在应该深入研究诺言,以更清晰(且缩进程度更小)的方式来构造代码。引言。