我不知道异步/等待是如何工作的。我稍微懂一点,但我不能让它工作。

function loadMonoCounter() {
    fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
       return await new Buffer( data);
  });
}

module.exports.read = function() {
  console.log(loadMonoCounter());
};

我知道,我可以使用readFileSync,但如果我这样做,我知道我永远不会理解async/await,我只会埋葬这个问题。

目标:调用loadMonoCounter()并返回一个文件的内容。

每次调用incrementMonoCounter()时,该文件都会递增(每次加载页面)。该文件包含二进制缓冲区的转储,并存储在SSD上。

无论我做什么,我都在控制台中得到一个错误或未定义。


当前回答

为了保持简洁并保留fs的所有功能:

const fs = require('fs');
const fsPromises = fs.promises;

async function loadMonoCounter() {
    const data = await fsPromises.readFile('monolitic.txt', 'binary');
    return new Buffer(data);
}

导入fs和fs。单独的承诺将提供对整个fs API的访问,同时也保持它更可读…这样下一个例子就很容易完成了。

// the 'next example'
fsPromises.access('monolitic.txt', fs.constants.R_OK | fs.constants.W_OK)
    .then(() => console.log('can access'))
    .catch(() => console.error('cannot access'));

其他回答

因为Node v11.0.0 fs承诺在没有promisify的情况下本地可用:

const fs = require('fs').promises;
async function loadMonoCounter() {
    const data = await fs.readFile("monolitic.txt", "binary");
    return Buffer.from(data);
}

有一个fs。readFileSync(path, options)方法,该方法是同步的。

const fs = require("fs");
const util = require("util");
const readFile = util.promisify(fs.readFile);
const getContent = async () => {
let my_content;
try {
  const { toJSON } = await readFile("credentials.json");
  my_content = toJSON();
  console.log(my_content);
} catch (e) {
  console.log("Error loading client secret file:", e);
 }
};

从节点v14.0.0开始

const {readFile} = require('fs/promises');

const myFunction = async()=>{
    const result = await readFile('monolitic.txt','binary')
    console.log(result)
}

myFunction()

为了保持简洁并保留fs的所有功能:

const fs = require('fs');
const fsPromises = fs.promises;

async function loadMonoCounter() {
    const data = await fsPromises.readFile('monolitic.txt', 'binary');
    return new Buffer(data);
}

导入fs和fs。单独的承诺将提供对整个fs API的访问,同时也保持它更可读…这样下一个例子就很容易完成了。

// the 'next example'
fsPromises.access('monolitic.txt', fs.constants.R_OK | fs.constants.W_OK)
    .then(() => console.log('can access'))
    .catch(() => console.error('cannot access'));