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

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

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


当前回答

要使用await/async,你需要返回承诺的方法。如果没有像promisify这样的包装器,核心API函数就不能做到这一点:

const fs = require('fs');
const util = require('util');

// Convert fs.readFile into Promise version of same    
const readFile = util.promisify(fs.readFile);

function getStuff() {
  return readFile('test');
}

// Can't use `await` outside of an async function so you need to chain
// with then()
getStuff().then(data => {
  console.log(data);
})

需要注意的是,readFileSync不接受回调,而是返回数据或抛出异常。你没有得到你想要的值,因为你提供的函数被忽略了,你没有捕捉到实际的返回值。

其他回答

请看这个例子 https://www.geeksforgeeks.org/node-js-fs-readfile-method/

//包含fs模块 Var fs = require('fs'); //使用fs.readFile()方法读取文件 fs.readFile('demo.txt', (err, data) => { console.log(数据); })

这将从你的文件内容中产生一个字符串,你不需要使用承诺来工作

const fs = require('fs');
const data = fs.readFileSync("./path/to/file.json", "binary");

要使用await/async,你需要返回承诺的方法。如果没有像promisify这样的包装器,核心API函数就不能做到这一点:

const fs = require('fs');
const util = require('util');

// Convert fs.readFile into Promise version of same    
const readFile = util.promisify(fs.readFile);

function getStuff() {
  return readFile('test');
}

// Can't use `await` outside of an async function so you need to chain
// with then()
getStuff().then(data => {
  console.log(data);
})

需要注意的是,readFileSync不接受回调,而是返回数据或抛出异常。你没有得到你想要的值,因为你提供的函数被忽略了,你没有捕捉到实际的返回值。

因为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。承诺自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)
  }
}