我是Javascript的新手,遇到了问题。在我的脚本中,我想获取添加到文件夹的最后一个文件。这工作正常,但是当我想在之后使用该文件名时它不起作用。因为在控制台上我可以看到脚本没有按照我期望的顺序执行。
var fs = require('fs');
var direc = path.join(__dirname, '../', 'uploads');
var url = 'start';
console.log('1');
fs.readdir(direc, function(err, list){
list.forEach(function(file){
current = fs.statSync(direc + '/' + file).ctime;
if (current > temp ){
url = file;
console.log('2');
}
temp = fs.statSync(direc + '/' + file).ctime;
})
console.log('3');
});
console.log(url);
console.log('4');
控制台中的结果是:
1
start
4
3
2
为什么javascript不会以您预测的方式执行,意思是1 - > 2 - > 3 - > url - > 4?
答案 0 :(得分:1)
那是因为您正在执行asynchronous
操作。而不是等待响应,执行立即继续,并且执行请求调用后的语句。
您可以使用callback
功能解决此问题。
function read(callback){
fs.readdir(direc, function(err, list){
list.forEach(function(file){
current = fs.statSync(direc + '/' + file).ctime;
if (current > temp ){
url = file;
}
temp = fs.statSync(direc + '/' + file).ctime;
})
callback(url);
});
}
read(function(url){
console.log(url);
});
以下是解决问题的可行方法。
ES2017+
)ES2015+
)答案 1 :(得分:-1)