Eu gostaria de usar async / waitit em algumas operações do sistema de arquivos. Normalmente assíncrono / espera funciona bem porque eu uso babel-plugin-syntax-async-functions
.
Mas, com esse código, eu me deparo com o caso if, onde names
é indefinido:
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();
Quando reconstruo o código na versão infernal de retorno de chamada, tudo está bem e recebo os nomes dos arquivos. Obrigado por suas dicas.
javascript
node.js
async-await
fs
Quellenangeber
fonte
fonte
SyntaxError: Unexpected token import
mensagem de erro. O node8 suportaimport
token por padrão?import
sintaxe. Atualmente, requer algumas transpilações. Seria ok também usarconst fs = require('fs')
ouconst { promisify } = require('util')
{err, names} = function
chamada a sintaxe?names = await readdir('path/to/dir');
e se houver umerr
identificador nocatch
bloco. De qualquer forma, o nome da sintaxe é uma tarefa de desestruturação que foi apenas uma resposta à pergunta de Qasim.Suporte nativo para assíncrono aguarda funções fs desde o Nó 11
Desde o Node.JS 11.0.0 (estável) e a versão 10.0.0 (experimental), você tem acesso aos métodos do sistema de arquivos já promisificados e pode usá-los com
try catch
tratamento de exceções, em vez de verificar se o valor retornado pelo retorno de chamada contém um erro.A API é muito limpa e elegante! Basta usar o
.promises
membro dofs
objeto:fonte
return await
cumprir sua promessa, o bloqueio de captura é inútil ... Eu acho que às vezes é uma boa prática aguardar antes de retornarNode.js 8.0.0
Assíncrono nativo / aguardar
Promisify
Nesta versão, você pode usar a função Node.js nativa da biblioteca util .
Promise Wrapping
Adendo
Sempre use
try..catch
para aguardar blocos, se você não deseja repetir a exceção superior.fonte
await
deve estar sempre emasync
bloco :)const res = await readFile('data.json') console.log(res)
de alguma função asyncfs.promises
e usá-lo comasync/await
é tão confuso para mimthen
,catch
etc.Você pode produzir o comportamento errado porque o File-Api
fs.readdir
não retorna uma promessa. Leva apenas um retorno de chamada. Se você quiser usar a sintaxe async-waitit, poderá 'promisificar' a função da seguinte maneira:e chame-o:
fonte
A partir da v10.0 , você pode usar
fs.Promises
Exemplo usando
readdir
Exemplo usando
readFile
fonte
ExperimentalWarning: The fs.promises API is experimental
aviso: github.com/pnpm/pnpm/issues/1178v10.15.3
- é possível suprimir a mensagem. No entanto, com o problema ainda em aberto, achei que vale a pena mencionar.readFile
,? im novo para essa coisa toda de promessas, e tudo que eu quero fazer é ter uma funçãogetContent
que eu posso chamar e aguardar em várias partes durante todo o meu script, mas isso está provando muito confusoEsta é a versão do TypeScript para a pergunta. É utilizável após o Nó 11.0:
fonte
Aqui está o que funcionou para mim:
Esse código funciona no nó de 7.6 sem babel quando bandeira harmonia está ativada:
node --harmony my-script.js
. E começando com o nó 7.7, você nem precisa desse sinalizador !A
fsp
biblioteca incluída no começo é apenas um wrapper promisificado parafs
(efs-ext
).Estou realmente empolgado com o que você pode fazer no nó sem o babel hoje em dia! Nativo
async
/await
tornar o código de escrita um prazer!ATUALIZAÇÃO 2017-06: o módulo fs-promessa foi descontinuado. Use em
fs-extra
vez disso com a mesma API.fonte
Recomenda o uso de um pacote npm, como https://github.com/davetemplin/async-file , em comparação com as funções personalizadas. Por exemplo:
Outras respostas estão desatualizadas
fonte
Eu tenho esse pequeno módulo auxiliar que exporta versões promissificadas de
fs
funçõesfonte
Nó v14.0.0 e superior
você pode apenas fazer:
assim como você importaria de
"fs"
consulte este PR para obter mais detalhes: https://github.com/nodejs/node/pull/31553
fonte