javascript - 为什么异步 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");
解决方案
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");
推荐阅读
- python - Conv1D 中的步幅使用
- android - 未使用电子邮件和联系号码验证在 Firebase 身份验证应用中发送 OTP
- c++ - c++ 如何使用模板调用内部类的构造函数?
- intellij-idea - 这是尾递归还是 Kotlin 编译器的问题?
- sql-server - 查询以获取具有限制的一对多记录
- javascript - HTML表格,固定列加载和水平滚动到左/右滚动箭头上的下一列单击
- ios - ARKit:以实际大小显示对象
- firebase - Firebase Firestore 和 Cloud Functions 显示错误的读取、写入和删除数字?
- listview - Xamarin Forms Listview 不更新 GUI
- python - 如何使用视频分析技术确定机器人汽车的速度?