node.js 异步;计算回调
node.js async; counting callbacks
回调函数的实例计数在 node.js 中如何工作?
我在做learnyounode的第9个习题(下面是官方解法)。
据我了解,httpGet 函数被调用了三次,从 运行 到 process.argv[2]、[3] 和 [4]。但是怎么能数得过 === 3 呢?各个功能不就一个吗? httpGet 的一次调用如何知道其他的?
var http = require('http')
var bl = require('bl')
var results = []
var count = 0
function printResults () {
for (var i = 0; i < 3; i++)
console.log(results[i])
}
function httpGet (index) {
http.get(process.argv[2 + index], function (response) {
response.pipe(bl(function (err, data) {
if (err)
return console.error(err)
results[index] = data.toString()
count++
if (count == 3)
printResults()
}))
})
}
for (var i = 0; i < 3; i++)
httpGet(i)
首先,最好不要使用 var
。
var
是在全局范围内定义的,因此它的值在调用之间更新
阅读更多关于 var
here
But how could count ever === 3?
count
是在 httpGet
之外定义的,因此它的值独立于那些函数调用。 count++
与 count = count + 1
相同,即每次调用 httpGet
都会将 count
的值增加 1
。第三次调用该函数时,count
的值将是 3
.
我们可以很容易地复制这个:
var count = 0;
function httpGet() {
count++;
console.log('count: ', count);
if (count === 3) {
console.log('count is 3');
}
}
httpGet();
httpGet();
httpGet();
回调函数的实例计数在 node.js 中如何工作?
我在做learnyounode的第9个习题(下面是官方解法)。 据我了解,httpGet 函数被调用了三次,从 运行 到 process.argv[2]、[3] 和 [4]。但是怎么能数得过 === 3 呢?各个功能不就一个吗? httpGet 的一次调用如何知道其他的?
var http = require('http')
var bl = require('bl')
var results = []
var count = 0
function printResults () {
for (var i = 0; i < 3; i++)
console.log(results[i])
}
function httpGet (index) {
http.get(process.argv[2 + index], function (response) {
response.pipe(bl(function (err, data) {
if (err)
return console.error(err)
results[index] = data.toString()
count++
if (count == 3)
printResults()
}))
})
}
for (var i = 0; i < 3; i++)
httpGet(i)
首先,最好不要使用 var
。
var
是在全局范围内定义的,因此它的值在调用之间更新
阅读更多关于 var
here
But how could count ever === 3?
count
是在 httpGet
之外定义的,因此它的值独立于那些函数调用。 count++
与 count = count + 1
相同,即每次调用 httpGet
都会将 count
的值增加 1
。第三次调用该函数时,count
的值将是 3
.
我们可以很容易地复制这个:
var count = 0;
function httpGet() {
count++;
console.log('count: ', count);
if (count === 3) {
console.log('count is 3');
}
}
httpGet();
httpGet();
httpGet();