Node.js nodejs中的回调顺序
我在理解nodejs向文件写入/追加文本时回调方法的调用顺序时遇到问题:Node.js nodejs中的回调顺序,node.js,Node.js,我在理解nodejs向文件写入/追加文本时回调方法的调用顺序时遇到问题: fs.writeFile(path.join(__dirname, '/test', 'hello.txt'), 'Hello ', (err) => { if (err) throw err; console.log("1"); fs.appendFile(path.join(__dirname, '/test', 'hello.txt'), 'World!', (err) => {
fs.writeFile(path.join(__dirname, '/test', 'hello.txt'), 'Hello ', (err) => {
if (err) throw err;
console.log("1");
fs.appendFile(path.join(__dirname, '/test', 'hello.txt'), 'World!', (err) => {
if (err) throw err;
console.log("2");
});
console.log("3");
});
执行这段代码,我得到输出顺序:1,3,2
但是逻辑调用顺序不是1,2,3吗?或者console.log(“3”)不是简单地“等待”到appendFile完成执行吗
我想我完全搞错了。console.log(“3”)
不会“等待”,因为它不是appendFile
回调的一部分。只有回调(即console.log(“2”);
)会“等待”appendFile
完成
代码的顺序如下所示:
1
打印到控制台1
写入控制台时:开始向文件追加“World!”3
打印到控制台2
打印到控制台console.log(“3”)
不会“等待”,因为它不是appendFile
回调的一部分。只有回调(即console.log(“2”);
)会“等待”appendFile
完成
代码的顺序如下所示:
1
打印到控制台1
写入控制台时:开始向文件追加“World!”3
打印到控制台2
打印到控制台执行
console.log(“1”)
后,调用fs.appendFile
,但不等待它完成。它允许异步执行被调用的函数,并转到第行console.log(“3”)
在该函数的末尾,console.log(“3”)
作为回调执行
显然,您的
doSomthing
不是一个可以调用和跳过的异步函数。因此,代码必须等待该函数的完成 执行console.log(“1”)
后,调用fs.appendFile
,但不等待它完成。它允许异步执行被调用的函数,并转到第行console.log(“3”)
在该函数的末尾,console.log(“3”)
作为回调执行
显然,您的
doSomthing
不是一个可以调用和跳过的异步函数。因此,代码必须等待该函数的完成 不,这不是等待,这就是为什么你必须使用回调。writeFile
回调中的所有代码都会立即执行,并且当该操作完成时,appendFile
的嵌套回调会添加到待办事项列表中。@jornsharpe With立即,您的意思是按1,append,3的顺序?然后在append中调用函数?是的,这正是您看到的。不,它不会等待,这就是为什么您必须使用回调。writeFile
回调中的所有代码都会立即执行,并且当该操作完成时,appendFile
的嵌套回调会添加到待办事项列表中。@jornsharpe With立即,您的意思是按1,append,3的顺序?然后在append中调用函数?是的,这正是您看到的。