Saya tidak tahu bagaimana async
/ await
bekerja. Saya sedikit mengerti tapi saya tidak bisa membuatnya bekerja.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Saya tahu saya bisa menggunakan readFileSync
, tetapi jika saya melakukannya, saya tahu saya tidak akan pernah mengerti async
/ await
dan saya akan mengubur masalahnya.
Sasaran: Memanggil loadMonoCounter()
dan mengembalikan konten file.
File itu bertambah setiap kali incrementMonoCounter()
dipanggil (setiap pemuatan halaman). File tersebut berisi dump buffer dalam biner dan disimpan di SSD.
Apa pun yang saya lakukan, saya mendapatkan kesalahan atau undefined
di konsol.
node.js
asynchronous
readfile
Jeremy Dicaire
sumber
sumber
Jawaban:
Untuk menggunakan
await
/async
Anda membutuhkan metode yang mengembalikan promise. Fungsi API inti tidak melakukannya tanpa pembungkus sepertipromisify
:Sebagai catatan,
readFileSync
tidak menerima panggilan balik, itu mengembalikan data atau melontarkan pengecualian. Anda tidak mendapatkan nilai yang Anda inginkan karena fungsi yang Anda berikan diabaikan dan Anda tidak menangkap nilai pengembalian yang sebenarnya.sumber
async
/await
, jadi itu adalah langkah yang perlu. Kabar baiknyapromisify
biasanya membuatnya bekerja tanpa kekacauan.const file = await readFile...; return file;
.Karena janji Node v11.0.0 fs tersedia secara native tanpa
promisify
:sumber
import { promises as fs } from "fs";
jika Anda ingin menggunakan sintaks impor.Ini adalah versi TypeScript dari jawaban @ Joel. Ini dapat digunakan setelah Node 11.0:
sumber
Anda dapat dengan mudah menggabungkan perintah readFile dengan janji seperti ini:
lalu gunakan:
sumber
Anda dapat menggunakan
fs.promises
tersedia secara native sejak Node v11.0.0sumber
const fs = require('fs').promises
Ada
fs.readFileSync( path, options )
metode yang sinkron.sumber