fs.readFileSync () без обратного вызова и кодирования не работает? - PullRequest
0 голосов
/ 31 октября 2019

Я написал этот небольшой тестовый код в попытке отладить другой мой проект и обнаружил, что fs.readFileSync (), по-видимому, не имеет функции обратного вызова и кодирование не работает.

const fs = require("fs");

var x = fs.readFileSync(__dirname + "/file.txt", {encode: "utf8"}, () => {

    console.log("Callback function?");

});

console.log(x);

Ожидаемый вывод: "Функция обратного вызова?" содержимое файла file.txt

Но я просто получил ""

Что здесь не так?

Ответы [ 3 ]

2 голосов
/ 31 октября 2019

Ознакомьтесь с документацией здесь . Он явно не показывает обратного вызова, и я думаю, что вызов не работает, потому что вы дали функцию вместо опции «flags», и это вроде как испортило ее.

Кроме того, это называется readFile SYNC"- Синхронные действия по умолчанию не имеют обратного вызова, вы можете просто написать, что вы хотите, чтобы происходило сразу после них - и это произойдет сразу после них. Нет проблем с синхронизацией, потому что опять-таки они синхронны.

Правильный код для вашей программы:

var x = fs.readFileSync(__dirname + "/file.txt", { encoding: "utf8" });, и после этого журнала, который вы хотите или делаете с данными, которые вы хотите, он будет внутри переменной X,

0 голосов
/ 31 октября 2019

Я не уверен, что вам нужны синхронные операции в Node.js или асинхронные, но я вижу, что вы используете синхронную функцию fs.readFileSync и пытаетесь получить доступ через асинхронный подход

Для чтения файла вы можетеиспользуйте метод readFileSync класса fs: например

  const fs = require("fs");
    const output = fs.readFileSync(__dirname + "/file.txt");
    console.log(output);

Для асинхронного получения данных вы получите контент при обратном вызове.

fs.readFile(filename, "utf8", (err, data) => {
        if (err) throw err;
        console.log(data)
    });
0 голосов
/ 31 октября 2019

fs.readFileSync не принимает обратный вызов, поскольку он работает синхронно. Он вернет данные файла.

Если вы хотите прочитать файл асинхронно, используйте fs.readFile .

Вот пример обоих:

// Sync. readFile
const fileData = fs.readFileSync("some_file.txt", { encoding: "utf8"});
console.log("fileData:", fileData);

// Async. readFile
fs.readFile("some_file.txt", { encoding: "utf8"}, (err, fileData) => {
    if (err) {
        console.error("Error occurred:", err);
    } else {
        console.log("fileData:", fileData);
    }
});
...