Saya ingin menggunakan async / await dengan beberapa operasi sistem file. Biasanya async / await berfungsi dengan baik karena saya menggunakan babel-plugin-syntax-async-functions
.
Tetapi dengan kode ini saya mengalami kasus if di mana names
tidak ditentukan:
import fs from 'fs';
async function myF() {
let names;
try {
names = await fs.readdir('path/to/dir');
} catch (e) {
console.log('e', e);
}
if (names === undefined) {
console.log('undefined');
} else {
console.log('First Name', names[0]);
}
}
myF();
Ketika saya membangun kembali kode ke dalam versi neraka panggilan balik semuanya OK dan saya mendapatkan nama file. Terima kasih atas petunjuk Anda.
javascript
node.js
async-await
fs
Quellenangeber
sumber
sumber
SyntaxError: Unexpected token import
pesan error. apakah node8 mendukungimport
token secara default?import
sintaks baru . Saat ini membutuhkan transpiling. Akan baik-baik saja untuk menggunakanconst fs = require('fs')
atauconst { promisify } = require('util')
{err, names} = function
sintaksnya?names = await readdir('path/to/dir');
dan jika adaerr
menanganinya dicatch
blok. Either way, nama sintaksis tugas merusak yang hanya menanggapi pertanyaan Qasim.Dukungan asli untuk async menunggu fungsi fs sejak Node 11
Sejak Node.JS 11.0.0 (stabil), dan versi 10.0.0 (eksperimental), Anda memiliki akses ke metode sistem file yang sudah dijanjikan dan Anda dapat menggunakannya dengan
try catch
penanganan pengecualian daripada memeriksa apakah nilai yang dikembalikan callback berisi sebuah kesalahan.API-nya sangat bersih dan elegan! Cukup gunakan
.promises
anggotafs
objek:sumber
return await
berjanji, blok tangkapan tidak ada gunanya ... Saya pikir kadang-kadang merupakan praktik yang baik untuk menunggu sebelum kembaliNode.js 8.0.0
Asinkron asli / menunggu
Promisify
Dari versi ini, Anda dapat menggunakan fungsi Node.js asli dari pustaka util .
Pembungkus Janji
Nasihat
Selalu gunakan
try..catch
untuk blok menunggu, jika Anda tidak ingin menampilkan kembali pengecualian ke atas.sumber
await
harus selalu diasync
blok :)const res = await readFile('data.json') console.log(res)
di beberapa fungsi asinkronfs.promises
dan menggunakannya denganasync/await
sangat membingungkan sayathen
,catch
dll. Di mana async / await adalah aliran perilaku modern.Anda mungkin menghasilkan perilaku yang salah karena File-Api
fs.readdir
tidak mengembalikan janji. Ini hanya membutuhkan panggilan balik. Jika Anda ingin menggunakan sintaks async-await, Anda dapat 'menjanjikan' fungsi seperti ini:dan sebut saja:
sumber
Mulai v10.0 , Anda dapat menggunakan
fs.Promises
Contoh penggunaan
readdir
Contoh penggunaan
readFile
sumber
ExperimentalWarning: The fs.promises API is experimental
peringatan: github.com/pnpm/pnpm/issues/1178v10.15.3
- itu mungkin untuk menyembunyikan pesan. Namun, dengan masalah yang masih terbuka, saya pikir itu layak untuk disebutkan.readFile
,? Saya baru dalam hal keseluruhan janji ini, dan yang ingin saya lakukan hanyalah memiliki fungsigetContent
yang dapat saya panggil dan tunggu di berbagai bagian di seluruh skrip saya, namun ini terbukti sangat membingungkanIni adalah versi TypeScript untuk pertanyaan tersebut. Ini dapat digunakan setelah Node 11.0:
sumber
Inilah yang berhasil untuk saya:
Kode ini bekerja di simpul 7,6 tanpa babel ketika harmoni bendera diaktifkan:
node --harmony my-script.js
. Dan dimulai dengan node 7.7, Anda bahkan tidak membutuhkan flag ini !The
fsp
perpustakaan termasuk dalam awal hanya bungkus promisified untukfs
(danfs-ext
).Saya sangat bersemangat tentang apa yang dapat Anda lakukan di node tanpa babel hari ini! Native
async
/await
buat kode penulisan sangat menyenangkan!UPDATE 2017-06: modul fs-promise tidak digunakan lagi. Gunakan
fs-extra
sebagai gantinya dengan API yang sama.sumber
Rekomendasikan menggunakan paket npm seperti https://github.com/davetemplin/async-file , dibandingkan dengan fungsi kustom. Sebagai contoh:
Jawaban lain sudah ketinggalan zaman
sumber
Saya memiliki modul bantuan kecil ini yang mengekspor versi fungsi yang dijanjikan
fs
sumber
Node v14.0.0 dan yang lebih baru
Anda bisa melakukan:
seperti saat Anda mengimpor dari
"fs"
lihat PR ini untuk lebih jelasnya: https://github.com/nodejs/node/pull/31553
sumber