下面的代码创建一个文本文件,然后读取它,覆盖它,然后再次读取它.除了创建文件之外,还使用Node.js async readFile和writeFile执行三个I/O操作.
我不明白为什么第一次读取没有返回错误但没有数据.此代码的输出是:
即使操作是以任意顺序发生的(由于它们的异步性质),我也不希望得到一个"空数据"对象.
任何想法为什么我在读取文件时得到一个空数据(没有错误)?
我有什么办法可以确保读取文件内容吗?
var fs = require('fs');
var fileName = __dirname + '/test.txt';
// Create the test file (this is sync on purpose)
fs.writeFileSync(fileName, 'initial test text', 'utf8');
console.log("Starting...");
// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
var msg = "";
if(err)
console.log("first read returned error: ", err);
else {
if (data === null)
console.log("first read returned NULL data!");
else if (data === "")
console.log("first …Run Code Online (Sandbox Code Playgroud) 我已经为我的节点服务器编写了跨多个文件的代码。
如果我有一个文件,请说basket.js:
var Basket = {
fruits : 0,
addFruit : function() {
fruits++;
},
removeFruit : function() {
fruits--;
},
printFruit : function() {
console.log(this.fruits);
}
}
module.export = Basket;
Run Code Online (Sandbox Code Playgroud)
我还有另一个名为 give.js 的文件:
var Basket1 = require("./basket.js");
Basket1.addFruit();
Basket1.printFruit();
Run Code Online (Sandbox Code Playgroud)
另一个名为 take.js 的文件:
var Basket2 = require("./basket.js");
Basket2.removeFruit();
Basket2.printFruit();
Run Code Online (Sandbox Code Playgroud)
两个文件会写入同一个篮子实例吗?换句话说,他们会控制财产,水果吗?节点是否自行管理竞争条件?即如果两个修改水果的命令同时从 add 和 sub 进来,node 知道如何处理吗?
如果我想使两个文件可以同时查看一个单例并访问它,这是要走的路吗?或者其他人如何做到这一点?