谁能给我解释一下 for
循环发生了什么?我不明白为什么循环超出了它的条件。我希望条件 [i]
停止在“2”。我想这种行为对于 for
循环内的其他异步函数也是一样的。非常感谢!
var path = require('path')
var fs = require('fs')
var request = require('request')
var cheerio = require('cheerio')
for (i=0; i < 3; i++) {
console.log(i)
var arr = []
var url = 'https://en.wikipedia.org/wiki/Web_scraping'
request (url, function(error,response,body) {
if(error){
throw err;
} $ = cheerio.load(body)
var x = $.html()
console.log(i)
})
}
/* Results
0
1
2
3
3
3
*/
最佳答案
您的循环恰好执行 3 次并在此处记录 i
- 0,1,2
:
for(i=0; i < 3; i++){
console.log(i)
^^^^^^^^^^^^^ <--------------------------------
但是这里添加了回调
request(url, function(error,response,body){
^^^^^^^^^^^^ <----------------------------
执行 3 次并记录 3, 3, 3
:
if(error){
throw err;
} $ = cheerio.load(body)
var x = $.html()
console.log(i)
^^^^^^^^^^^^^ <-----------------------------
})
参见 this question理解为什么 i
在回调中被输出为 3
三次,而不是你可能期望的 0, 1, 2
。如果您使用 let
而不是 var
,您将得到预期的 0, 1, 2
:
for(let i=0; i < 3; i++){
关于javascript - For 循环 - 条件中断 - 内部异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43445851/