Me gustaría usar async / await con algunas operaciones del sistema de archivos. Normalmente async / await funciona bien porque lo uso babel-plugin-syntax-async-functions.
Pero con este código me encuentro con el caso if donde namesno está definido:
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();
Cuando reconstruyo el código en la versión de devolución de llamada todo está bien y obtengo los nombres de archivo. Gracias por tus sugerencias.
javascript
node.js
async-await
fs
Quellenangeber
fuente
fuente

SyntaxError: Unexpected token importmensaje de error. ¿node8 admiteimporttoken por defecto?importsintaxis. Actualmente requiere algo de transpiling. Estaría bien usar tambiénconst fs = require('fs')oconst { promisify } = require('util'){err, names} = functionllama la sintaxis?names = await readdir('path/to/dir');y si hay unerrcontrolador en elcatchbloque. De cualquier manera, el nombre de la sintaxis es una tarea de desestructuración que fue solo en respuesta a la pregunta de Qasim.El soporte nativo para asíncrono espera funciones fs desde el Nodo 11
Desde Node.JS 11.0.0 (estable) y la versión 10.0.0 (experimental), tiene acceso a los métodos del sistema de archivos que ya están prometidos y puede usarlos con
try catchmanejo de excepciones en lugar de verificar si el valor devuelto de la devolución de llamada contiene un error.¡La API es muy limpia y elegante! Simplemente use
.promisesmiembro delfsobjeto:fuente
return awaitprometes, el bloqueo no sirve de nada ... Creo que a veces es una buena práctica esperar antes de regresarNode.js 8.0.0
Asíncrono nativo / espera
Promisificar
Desde esta versión, puede usar la función nativa Node.js de la biblioteca util .
Envoltura de promesas
Consejo
Utilice siempre
try..catchpara bloques de espera, si no desea volver a lanzar la excepción superior.fuente
awaitdebe estar siempre enasyncbloque :)const res = await readFile('data.json') console.log(res)en alguna función asíncronafs.promisesy usarloasync/awaites muy confuso para míthen,catchetc. Donde están asíncronos / aguardan es el flujo de comportamiento moderno.Puede producir un comportamiento incorrecto porque File-Api
fs.readdirno devuelve una promesa. Solo toma una devolución de llamada. Si desea utilizar la sintaxis de espera asíncrona, puede 'prometer' la función de esta manera:y llámalo en su lugar:
fuente
A partir de v10.0 , puede usar
fs.PromisesEjemplo usando
readdirEjemplo usando
readFilefuente
ExperimentalWarning: The fs.promises API is experimentaladvertencia: github.com/pnpm/pnpm/issues/1178v10.15.3- es posible suprimir el mensaje. Sin embargo, con el problema aún abierto, pensé que valía la pena mencionarlo.readFile,? Soy nuevo en todo esto promete, y todo lo que quiero hacer es tener una funcióngetContentque pueda llamar y esperar en varias partes a lo largo de mi guión, sin embargo, esto está resultando muy confusoEsta es la versión de TypeScript a la pregunta. Es utilizable después del Nodo 11.0:
fuente
Esto es lo que funcionó para mí:
Este código funciona en el nodo 7.6 sin babel cuando la bandera de la armonía está activada:
node --harmony my-script.js. Y comenzando con el nodo 7.7, ¡ni siquiera necesita esta bandera !La
fspbiblioteca incluida al principio es solo un contenedor prometido parafs(yfs-ext).¡Estoy realmente entusiasmado con lo que puedes hacer en el nodo sin babel en estos días! ¡Native
async/awaithacer que escribir código sea un placer!ACTUALIZACIÓN 2017-06: el módulo fs-promise fue obsoleto. Utilice en su
fs-extralugar con la misma API.fuente
Se recomienda utilizar un paquete npm como https://github.com/davetemplin/async-file , en comparación con las funciones personalizadas. Por ejemplo:
Otras respuestas están desactualizadas
fuente
Tengo este pequeño módulo de ayuda que exporta versiones de funciones prometidas
fsfuente
Nodo v14.0.0 y superior
solo puedes hacer:
tal como importarías de
"fs"vea este PR para más detalles: https://github.com/nodejs/node/pull/31553
fuente