2017-10-21 114 views
2

我不知道如何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在控制台。

回答

11

要使用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并不需要一个回调,它返回的数据或抛出异常。你没有得到你想要的价值,因为你提供的这个功能被忽略了,你没有获得实际的回报价值。

+1

谢谢,我不知道我需要包装核心API。你太棒了。 –

+2

核心API预先约定了现代Promise规范和采用'async' /'await',所以这是必要的步骤。好消息是'promisify'通常可以让它工作得毫不慌乱。 – tadman