2017-10-21 111 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