如何正确读取async/await文件?
问题描述:
我不知道如何async/await工作。我略微理解它,但我无法让它工作。如何正确读取async/await文件?
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer(data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
我知道我可以使用readFileSync,但如果我这样做,我知道我永远也不会明白异步/等待和我就巴里的问题。
目标:致电loadMonoCounter()并返回文件的内容。
该文件每次增加incrementMonoCounter()被调用(每页加载)。该文件包含二进制缓冲区转储并存储在SSD中。
没有mather我做什么,我得到一个错误或undefined在控制台。
答
要使用await
/async
您需要返回承诺的方法。核心API函数不这样做,没有包装一样promisify
:
const fs = require('fs');
const util = require('util');
// Convert fs.readFile into Promise version of same
const readFile = util.promisify(fs.readFile);
async function getStuff() {
return await 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
并不需要一个回调,它返回的数据或抛出异常。你没有得到你想要的价值,因为你提供的这个功能被忽略了,你没有获得实际的回报价值。
谢谢,我不知道我需要包装核心API。你太棒了。 –
核心API预先约定了现代Promise规范和采用'async' /'await',所以这是必要的步骤。好消息是'promisify'通常可以让它工作得毫不慌乱。 – tadman