首页 > 解决方案 > 为什么异步 writeFile 方法的行为是同步的?

问题描述

我有一个简单的 JS 文件,它读取文本文件并写入并读取更改的文件。出于学习目的,我实现了以下代码。

当控件到达writeFile时,它不应该在后台运行并且控件应该转到该console.log("Test")行然后返回到writeFile?但它实际上完全执行 writeFile 并且控制转到基本上是同步行为的日志行。我在这里错过了什么吗?

console.log("Begin")
var fs = require("fs");
fs.readFile("input.txt", function(err, data) {
  if (err) {
    console.log(err);
  } else {
    console.log("Inside Read " + data.toString());
    fs.writeFile("input.txt", "Replaced Text", function(err) {
      if (err) {
        console.log(err);
      } else {
        console.log("Inside Write");
        var data = fs.readFileSync("Input.txt") console.log(data + " is the replaced text");
      }
      console.log("Test2");
    });
  }
});
console.log("Ended");

标签: javascriptnode.jsasynchronouscallback

解决方案


console.log("Test2")位于writeFile回调函数内部,在完成之前不会运行writeFile

var fs = require("fs");
fs.readFile("input.txt", function(err, data) {
  console.log("This will second, after print after readFile is complete);
  fs.writeFile("input.txt", "Replaced Text", function(err) {
    console.log("This will print last, after writeFile is complete");
  });
  console.log("This will print third, before writeFile is complete");
});
console.log("This will print first");

推荐阅读