节点新手,到目前为止我的理解是只有在当前函数完成时才会运行回调函数?我有这个权利吗?
我试图从bing搜索中抓取前3个结果,递增i然后再次运行但控制台正在记录“回调”并在浏览器启动之前执行第二个循环。
任何有关实现这项工作的最佳方式的建议都将受到赞赏。
function browse(rows, i, cb) {
var asn = rows[i].id
var name = rows[i].name
console.log(name);
client
.url('https://www.bing.com')
.setValue('#sb_form_q', '"' + name + '"')
.click('#sb_form_go', function() {
for (var i = 1; i < 4; i++) { //get first 3 results
var loc = '#b_results > li:nth-child(' + i + ') > h2 > a';
client.getAttribute(loc, 'href', function(err, text) {
console.log(text);
fs.appendFile("asnres.txt", asn + ":" + text + "\n", function(err) {
if (err) {
return console.log(err);
}
});
});
}
});
if (i != rows.length) {
console.log("calling back");
i++
cb(rows, i)
}
}
client.init().then(function() {
browse(rows, i, browse)
});