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

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上。

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


当前回答

你可以很容易地用这样的承诺包装readFile命令:

async function readFile(path) {
    return new Promise((resolve, reject) => {
      fs.readFile(path, 'utf8', function (err, data) {
        if (err) {
          reject(err);
        }
        resolve(data);
      });
    });
  }

然后使用:

await readFile("path/to/file");

其他回答

你可以很容易地用这样的承诺包装readFile命令:

async function readFile(path) {
    return new Promise((resolve, reject) => {
      fs.readFile(path, 'utf8', function (err, data) {
        if (err) {
          reject(err);
        }
        resolve(data);
      });
    });
  }

然后使用:

await readFile("path/to/file");

你可以在下面找到我的方法: 首先,我需要fs作为fsBase,然后我把“承诺”放在fs变量内。

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

const fn = async () => {
    const data = await fs.readFile('example.txt', 'utf8');
    console.log(data);
};

fn();

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

这是@Joel的回答的TypeScript版本。Node 11.0以后可以使用:

import { promises as fs } from 'fs';

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

你可以用fs。承诺自Node v11.0.0以来本机可用

import fs from 'fs';

const readFile = async filePath => {
  try {
    const data = await fs.promises.readFile(filePath, 'utf8')
    return data
  }
  catch(err) {
    console.log(err)
  }
}