使用NodeJS FS mkdir时,包含回调的重要性是什么?

Ric*_*ton 7 javascript filesystems callback node.js

我正在玩NodeJS REPL控制台并遵循本教程.

http://www.tutorialspoint.com/nodejs/nodejs_file_system.htm

我专注于File System(FS)模块.我们来看看mkdir用于创建目录的函数.

根据TutorialsPoint,这是您使用FS创建目录的方式

var fs = require("fs");

console.log("Going to create directory /tmp/test");
fs.mkdir('/tmp/test',function(err){
   if (err) {
       return console.error(err);
   }
   console.log("Directory created successfully!");
});
Run Code Online (Sandbox Code Playgroud)

他们特别说你需要这种语法

fs.mkdir(path[, mode], callback)
Run Code Online (Sandbox Code Playgroud)

好吧,我只是尝试使用较少的代码,没有回调,它工作.

var fs = require('fs');
fs.mkdir('new-directory');
Run Code Online (Sandbox Code Playgroud)

并且目录已创建.语法应该是

fs.mkdir(path);
Run Code Online (Sandbox Code Playgroud)

我不得不问,回调的目的是什么,你真的需要吗?为了删除目录,我可以理解为什么你需要它,以防目录不存在.但我看不出该mkdir命令可能出现什么问题.好像很多不必要的代码.

jfr*_*d00 10

当您需要知道呼叫是否成功时,需要回调.如果您不关心它何时完成或者不关心是否存在错误,那么您不必通过回调.

请记住,这种类型的函数是异步的.它在将来完成一些未知时间,因此了解它何时完成或成功完成的唯一方法是通过传递回调函数,并且在调用回调时,您可以检查错误并查看它已完成.

事实证明,肯定会出现mkdir()诸如错误路径,权限错误等问题......因此错误肯定会发生.并且,如果要立即使用该新目录,则必须等到调用回调才能使用它.

响应您的其他一条注释,fs.mkdir()无论您是否通过回调,该函数始终是异步的.

这是一个例子:

var path = '/tmp/test';
fs.mkdir(path, function (err) {
    if (err) {
        console.log('failed to create directory', err);
    } else {
        fs.writeFile(path + "/mytemp", myData, function(err) {
            if (err) {
                console.log('error writing file', err);
            } else {
                console.log('writing file succeeded');
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)