作者:凡心悟事 | 来源:互联网 | 2023-09-23 09:16
我现在构造的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| exports.testHandler = function(callback){
console.log('testHandler start');
var i = 0;
function iterator(item, cb){
i++;
fs.readFile('E://file.txt','utf-8',function(err, data){
cb(null);
});
}
async.map(array, iterator, function(err, results){
console.log('testHandler end');
return callback(err);
});
} |
这个函数会在web项目中并发调用(比如10个http请求,同时触发这个函数),因此按node单线程异步的机制,当文件IO操作时,testHandler这个函数还会被继续调用。
我的问题是,当fs.readFile执行完回调时,系统如何记录这个回调,如何处理上面i这个局部变量?因为,如果是传统的单线程程序,函数调用给出的回调函数地址是唯一的(内存中代码段的某个地址),局部变量可以在相应的堆栈(函数调用栈)中去找。而node在回调的时候,它怎么知道要回调的是函数,局部变量对应的是哪次请求的?