当我运行下面的代码时,它总是打印5,有什么方法可以保存状态?让它打印0,1,2,3,4?
for(var i=0; i<5; i++){
fs.readFile("./test.txt", "utf8", function(err, data){
console.log(i);
});
}
答案 0 :(得分:1)
您可以创建一个闭包(对于这种情况很有用):
for(var i=0; i<5; i++){
fs.readFile("./test.txt", "utf8", function(i) {
return function(err, data) {
console.log(i);
};
}(i));
}
您创建了一个匿名函数,但在作用域中使用了 i 。请注意,您可以按不同的顺序获取数字,因为读取文件是异步操作:
> 0
1
2
3
4
或:
> 0
2
1
3
4
答案 1 :(得分:0)
例如,你可以使用promises。
var Q = require('q');
var fs = require('fs');
var readFile = function(i) {
var deferred = Q.defer();
fs.readFile("./test.txt", "utf8", function(err, data) {
deferred.resolve(i);
});
return deferred.promise;
};
for (var i = 0; i < 5; i++) {
readFile(i).then(function(result) {
console.log(result);
});
}