在这段代码中,无论我将函数放在什么顺序,目录中的文件总是打印在目录名称之前:
var fs = require('fs');
fs.realpath(__dirname, function(err, path) {
if (err) {
console.log(err);
return;
}
console.log('Path is : ' + path);
});
fs.readdir(__dirname, function(err, files) {
if (err) return;
files.forEach(function(f) {
console.log('File: ' + f);
});
});
File: text_1.txt
File: text_2.txt
File: text_3.txt
Path: /home/user/docs
因此,如果fs.readdir()是第一个函数,则输出将是相同的。为什么会这样?
答案 0 :(得分:1)
这些函数是asynchronous,因此将它们放在文件中的顺序与执行操作的顺序几乎没有关系。 readdir
操作可能要快得多,因此它会在realpath
操作之前完成。
为了按顺序执行这些操作,您可以将调用放在另一个内部的回调中。
var fs = require('fs');
fs.realpath(__dirname, function(err, path) {
if (err) {
console.log(err);
return;
}
console.log('Path is : ' + path);
fs.readdir(__dirname, function(err, files) {
if (err) return;
files.forEach(function(f) {
console.log('File: ' + f);
});
});
});