Puedo marcar una función de JavaScript como "async" (es decir, devolver una promesa) con la async
palabra clave. Me gusta esto:
async function foo() {
// do something
}
¿Cuál es la sintaxis equivalente para las funciones de flecha?
javascript
promise
async-await
arrow-functions
BonsaiOak
fuente
fuente
var foo = async () => await Promise.resolve('ha');
- funciona bienit doesn't work
eso no tiene sentido ... ¿estás recibiendo un error? tal vez estás haciendo algo mal, sin el código que "no funciona" y una descripción significativa de cómo no funciona, solo puedes adivinar que estás haciendo algo mal (o usando un navegador antiguo)Respuestas:
Las funciones de flecha asíncronas se ven así:
Las funciones de flecha asíncronas se ven así para un solo argumento que se le pasa:
Las funciones de flecha asíncronas se ven así para múltiples argumentos pasados:
La forma anónima también funciona:
Una declaración de función asíncrona se ve así:
Uso de la función asíncrona en una devolución de llamada :
fuente
const foo = async () => {}
crea una función asíncrona con nombre llamadafoo
. Es completamente posible hacer funciones con nombre de esta manera (simplemente sin izar). En ES2016 +, la asignación de una función anónima a una variable la nombra después de la variable si se declara allí.foo = function bar () {}
que se creó para reemplazararguments.callee
al escribir funciones anónimas recursivas. Lo que tienes allí es una variable llamadafoo
que es una referencia a una función.const foo = async () => {}
el nombre de la función se establece enfoo
- ecma-international.org/ecma-262/6.0/… y ecma-international.org/ecma-262/6.0/… - vea la discusión en esdiscuss.org / tema / ...somefunction
no se puede cambiar después de que se establece. (Señala su función asincrónica anónima.)Esta es la forma más simple de asignar una expresión de
async
función de flecha a una variable con nombre :(Tenga en cuenta que esto no es estrictamente equivalente a
async function foo() { }
. Además de las diferencias entre lafunction
palabra clave y una expresión de flecha , la función en esta respuesta no está "elevada al principio" ).fuente
foo = function myName () {}
. El nombre esmyName
y se especifica que solo existe dentro de la función anónima y no está definido en ningún lado. Su propósito es reemplazararguments.callee
al escribir funciones anónimas recursivas.foo.name === 'foo'
). Pero solo porque está en el inicializador de unaconst
* declaración *, lo que significa que no es del todo correcto llamar a esto una "expresión de función de flecha asíncrona con nombre". También tiene razón en que el nombre de una expresión de función nombrada solo está vinculado dentro de su propio cuerpo, pero también se almacena en laname
propiedad de la función , lo cual es bueno para la depuración (y es más a menudo la razón por la que los nombraría).fn.name
además de tener un enlace en alcance (la variable).Función de flecha asíncrona invocada inmediatamente:
Expresión de función asincrónica invocada inmediatamente:
fuente
Sintaxis de la función de flecha asíncrona con parámetros
fuente
Ejemplo básico
fuente
También puedes hacer:
fuente