为什么这个nodejs代码以相同的顺序输出,而不管哪个函数首先出现?

时间:2017-09-25 01:07:24

标签: javascript node.js

在这段代码中,无论我将函数放在什么顺序,目录中的文件总是打印在目录名称之前:

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()是第一个函数,则输出将是相同的。为什么会这样?

1 个答案:

答案 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);
        });
    });
});