Вопрос по node.js – node.js несчастный файл для чтения

7

Следующий фрагмент кода создает текстовый файл, а затем читает его, перезаписывает и снова читает. За исключением создания файла, три операции ввода-вывода выполняются с использованием Node.js async readFile и writeFile.

Я не понимаю, почему возвращается первое чтениеno error ноno data или. Выход этого кода:

Starting... Done. first read returned EMPTY data! write finished OK second read returned data: updated text

Даже если бы операции происходили в произвольном порядке (из-за их асинхронного характера), я НЕ ожидал бы получить «пустые данные» объект.

Любые идеи, почему я получаю пустые данные при чтении файла (и без ошибок)?

Что я могу сделать, чтобы убедиться, что содержимое файла прочитано?

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 read returned EMPTY data!");
        else
            console.log("first read returned data: ", data);
    }
});


// Write async
fs.writeFile(fileName, 'updated text', 'utf8', function(err) {
    var msg = "";
    if(err)
        console.log("write finished with error: ", err);
    else
        console.log("write finished OK");
});


// Read async
fs.readFile(fileName, 'utf8', function(err, data) {
    var msg = "";
    if(err)
        console.log("second read returned error: ", err);
    else
        if (data === null) 
            console.log("second read returned NULL data!");
        else if (data === "") 
            console.log("second read returned EMPTY data!");
        else
            console.log("second read returned data: ", data);
});


console.log("Done.");

Ваш Ответ

1   ответ
15

askingsimultaneously.

fs.writeFileSync(filename, 'initial', 'utf8');
fs.readFile(filename, 'utf8', function(err, data) {
    console.log(data);
    fs.writeFile(filename, 'text', 'utf8', function(err) {
        fs.readFile(filename, 'utf8', function(err, data) {
            console.log(data);
        });
    });
});

series

fs.writeFileSync(filename, 'initial', 'utf8');
async.series([
    function(callback) {
        fs.readFile(filename, 'utf8', callback);
    },
    function(callback) {
        fs.writeFile(filename, 'text', 'utf8', callback);
    },
    function(callback) {
        fs.readFile(filename, 'utf8', callback);
    }
], function(err, results) {
    if(err) console.log(err);
    console.log(results); // Should be: ['initial', null, 'text']
});

async

fs.writeFileSync(filename, 'initial', 'utf8');
async.series([
    fs.readFile.bind(this, filename, 'utf8'),
    fs.writeFile.bind(this, filename, 'text', 'utf8'),
    fs.readFile.bind(this, filename, 'utf8'),
], function(err, results) {
    if(err) console.log(err);
    console.log(results); // Should be: ['initial', null, 'text']
});

bindthisthis).

Error: User Rate Limit Exceededwithin the Javascript Event Loop, Все, что пересекает цикл событий,askingError: User Rate Limit Exceededanother threadError: User Rate Limit Exceededno guaranteesError: User Rate Limit Exceeded
Error: User Rate Limit ExceededreadFileError: User Rate Limit ExceededwriteFileError: User Rate Limit ExceededreadFileError: User Rate Limit ExceededdataError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Hector Correa
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededfs.openError: User Rate Limit Exceededfs.fsyncError: User Rate Limit Exceeded

Похожие вопросы