Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 回调必须是节点中的函数_Javascript_Node.js - Fatal编程技术网

Javascript 回调必须是节点中的函数

Javascript 回调必须是节点中的函数,javascript,node.js,Javascript,Node.js,我是NodeJS新手,这段代码我无法正常工作。我想先删除stuff中的文件,然后删除文件本身 请问我做错了什么 var fs = require("fs"); fs.unlink('./stuff/writeMe.txt', () => { fs.rmdir('stuff'); }); 您可以使用rimraf包(递归删除)。否则,这是目录中唯一的文件吗?您可以使用rimraf包(递归删除)。否则,这是目录中唯一的文件吗?在节点中调用异步函数,如fs

我是NodeJS新手,这段代码我无法正常工作。我想先删除stuff中的文件,然后删除文件本身

请问我做错了什么

     var fs = require("fs");
     fs.unlink('./stuff/writeMe.txt', () => {
     fs.rmdir('stuff');
     });

您可以使用rimraf包(递归删除)。否则,这是目录中唯一的文件吗?

您可以使用rimraf包(递归删除)。否则,这是目录中唯一的文件吗?

在节点中调用异步函数,如
fs.unlink
fs.rmdir
,将启动任务。您将一个函数作为参数传递给他们,即回调函数,该函数在任务完成时被调用。回调函数有一个参数,告诉您操作是否成功完成

fs.unlink
完成时,只调用
fs.rmdir
就已经部分地利用了这一点。现在,您需要说明当
fs.unlink
完成时(即使没有),要做什么,并开始检查错误

出现错误时可以执行的一个示例是抛出该错误,它将打印该错误并退出流程

fs.unlink('stuff/writeMe.txt',(err)=>{
如果(错误)抛出错误;
fs.rmdir('stuff',(err)=>{
如果(错误)抛出错误;
});
});

在节点中调用异步函数,如
fs.unlink
fs.rmdir
,启动任务。您将一个函数作为参数传递给他们,即回调函数,该函数在任务完成时被调用。回调函数有一个参数,告诉您操作是否成功完成

fs.unlink
完成时,只调用
fs.rmdir
就已经部分地利用了这一点。现在,您需要说明当
fs.unlink
完成时(即使没有),要做什么,并开始检查错误

出现错误时可以执行的一个示例是抛出该错误,它将打印该错误并退出流程

fs.unlink('stuff/writeMe.txt',(err)=>{
如果(错误)抛出错误;
fs.rmdir('stuff',(err)=>{
如果(错误)抛出错误;
});
});

我建议将新的Promissions接口用于带有g
async/await
fs
模块,因为它可以更轻松地对异步操作进行排序,而无需嵌套。它还使错误处理更加简单:

const fsp = require("fs").promises;

async function someFunction() {
     try {
         await fsp.unlink('./stuff/writeMe.txt');
         await fsp.rmdir('./stuff');
     } catch(e) {
         // got an error, handle it here
         console.log(e);
     }
}

我建议在g
async/await
中为
fs
模块使用新的promissions接口,因为它可以更轻松地对异步操作进行排序,而无需嵌套。它还使错误处理更加简单:

const fsp = require("fs").promises;

async function someFunction() {
     try {
         await fsp.unlink('./stuff/writeMe.txt');
         await fsp.rmdir('./stuff');
     } catch(e) {
         // got an error, handle it here
         console.log(e);
     }
}

您需要向rmdir添加回调函数您需要向rmdir添加回调函数这与问题有何关系?问题中的代码删除文件,然后删除文件所在的目录。rmdir适用于空目录,所以我的角度是dir中可能有其他文件,或者您可以使用rimraf删除包含文件的整个目录。这与问题有什么关系?问题中的代码删除文件,然后删除文件所在的目录。rmdir适用于空目录,所以我的角度是,dir中可能有其他文件,或者您只需使用rimraf删除包含文件的整个目录。永远不要在普通异步回调中建议抛出err。它没有任何用处。显示实际错误处理的示例。我知道node.js文档就是这样展示的,它教了整整一代新手错误地编写错误处理的方法。对普通异步回调的抛出在您可以捕获它的地方没有任何用处(在本例中,它返回到
fs
库的异步内部)。@jfriend00:它什么也不做。它“打印[错误]并退出流程”,就像我在回答中写的那样。对于脚本,这是您经常想要的。(好吧,这是有承诺的,但这是一个类似的
.catch(err=>{process.nextTick(()=>{throw err;});})
)只有在不太严重的程序中,当出现错误时,才希望程序异常退出。99.99%的时间您正在编写一些调用方将调用的代码,而调用方希望知道是否有错误。这不是教新手如何编码的最好例子。我不知道你为什么要在这里防守,当你知道这不是你应该教一个新手的,你可以证明一个更好的做法。我的评论要点是让OP知道他们通常不应该编写这种类型的代码。永远不要在普通异步回调中推荐
throw err
。它没有任何用处。显示实际错误处理的示例。我知道node.js文档就是这样展示的,它教了整整一代新手错误地编写错误处理的方法。对普通异步回调的抛出在您可以捕获它的地方没有任何用处(在本例中,它返回到
fs
库的异步内部)。@jfriend00:它什么也不做。它“打印[错误]并退出流程”,就像我在回答中写的那样。对于脚本,这是您经常想要的。(好吧,这是有承诺的,但这是一个类似的
.catch(err=>{process.nextTick(()=>{throw err;});})
)只有在不太严重的程序中,当出现错误时,才希望程序异常退出。99.99%的时间您正在编写一些调用方将调用的代码,而调用方希望知道是否有错误。这不是教新手如何编码的最好例子。我不知道你为什么要在这里防守,当你知道这不是你应该教一个新手的,你可以证明一个更好的做法。我评论的目的是让OP知道他们通常不应该编写这种类型的代码。我如何在不等待的情况下调用promise接口?@AntonDuzenko-我不知道你的意思。所有
async
函数都会返回一个承诺,因此调用方必须