Posso marcar uma função javascript como "assíncrona" (ou seja, retornando uma promessa) com a async
palavra - chave. Como isso:
async function foo() {
// do something
}
Qual é a sintaxe equivalente para funções de seta?
javascript
promise
async-await
arrow-functions
BonsaiOak
fonte
fonte
var foo = async () => await Promise.resolve('ha');
- funciona muito bemit doesn't work
não tem sentido ... você está recebendo um erro? talvez você esteja fazendo algo errado, sem o código que "não funciona" e uma descrição significativa de como ele não funciona, você pode apenas supor que você está fazendo algo errado (ou usando um navegador antigo)Respostas:
As funções de seta assíncrona são assim:
As funções de seta assíncrona são assim para um único argumento passado a ele:
As funções de seta assíncrona são assim para vários argumentos passados para ele:
O formulário anônimo também funciona:
Uma declaração de função assíncrona se parece com isso:
Usando a função assíncrona em um retorno de chamada :
fonte
const foo = async () => {}
cria uma função assíncrona nomeada nomeadafoo
. É totalmente possível executar funções nomeadas dessa maneira (apenas sem içamento). No ES2016 +, a atribuição de uma função anônima a uma variável nomeia-a após a variável, se ela for declarada lá.foo = function bar () {}
criada para substituirarguments.callee
ao gravar funções anônimas recursivas. O que você tem lá é uma variável chamadafoo
que é uma referência a uma função.const foo = async () => {}
o nome da função é definido comofoo
- ecma-international.org/ecma-262/6.0/… e ecma-international.org/ecma-262/6.0/… - consulte a discussão em esdiscuss.org / topic /…somefunction
não pode ser alterada depois de configurada. (Ele aponta para a sua função assíncrona anônimo.)Essa é a maneira mais simples de atribuir uma expressão de
async
função de seta a uma variável nomeada :(Observe que isso não é estritamente equivalente a
async function foo() { }
. Além das diferenças entre afunction
palavra - chave e uma expressão em seta , a função nesta resposta não é "içada para o topo" .)fonte
foo = function myName () {}
. O nome émyName
e é especificado para existir apenas dentro da função anônima e não definido em nenhum lugar fora. Seu objetivo é substituirarguments.callee
ao escrever funções anônimas recursivas.foo.name === 'foo'
). Mas apenas porque está no inicializador de umaconst
instrução * - significando que não é certo chamar isso de "expressão de função de seta assíncrona nomeada". Você também está certo de que o nome de uma expressão de função nomeada é vinculado apenas dentro de seu próprio corpo, mas também é armazenado naname
propriedade da função , o que é bom para depuração (e é mais frequentemente o motivo pelo qual eu os nomearia).fn.name
, além de ter uma ligação no escopo (a variável).Função de seta assíncrona invocada imediatamente:
Expressão de função assíncrona invocada imediatamente:
fonte
Sintaxe da função Seta assíncrona com parâmetros
fonte
Exemplo básico
fonte
Você também pode fazer:
fonte