Dirección reimpresa: https://www.cnblogs.com/sghy/p/7987640.html
Definición : La función Async es una función de operación asincrónica, en esencia, la función Async es el azúcar sintáctico de la función Generator. async
La función es *
reemplazar el asterisco ( ) de la función Generador con async
el yield
reemplazo await
, y nada más.
Método de definición y método de llamada :
prueba de función asíncrona () { const a = espera fn1 (); const b = espera fn2 (a); } prueba()
Se puede ver en lo anterior: la función asíncrona no necesita ser como la función Generador, necesita llamar al next
método para ejecutar, y el método de llamada es el mismo que el método de llamada de función ordinaria
Explicación: a) async
indica que hay una operación asincrónica en la función, await
lo que indica que la expresión que sigue inmediatamente debe esperar el resultado
b) El valor de retorno de la función asíncrona es Promesa
Devuelva el objeto de promesa :
prueba de función asíncrona (a, b) {
const x = agregar (a, b);
const y = sumar (1, x);
volver y;
}
función add (x, y) {
devolver x + y;
}
console.log (test (1,2)) // Devuelve el objeto de promesa
test (1,2) .then (value => {
console.log (value) // 4 el objeto de promesa puede usar el método then () para obtener el resultado
})
Cambio de estado del objeto de promesa : await
El objeto de promesa detrás de todos los comandos internos ejecutará el cambio de estado, a menos return
que se encuentre una declaración o se arroje un error.
- return: el estado cambia a pendiente y la función luego se cambia para resolver
función asíncrona f () { regresar 'hola mundo'; } f (). luego (v => console.log (v)) // "Hola Mundo"
- Lanzar un error: el estado cambia directamente para rechazar
asíncrono f () { aguarde agregar (1,2); lanzar un nuevo error ('Hubo un error'); } función add (x, y) {(resolver, rechazar) => { resolver (x + y) }} F() .then (v => console.log (v)) .catch (e => console.log (e)) // Si hay un error, el estado de captura será capturado por el método catch
comando wait : en circunstancias normales, await
un objeto Promise sigue al comando. De lo contrario, se convertirá en un resolve
objeto Promesa inmediato.
función asíncrona f () { regreso espera 123; } f (). luego (v => console.log (v)) // 123
Manejo de errores : si la await
operación asíncrona posterior falla, es equivalente async
al objeto Promesa devuelto por la función reject
. La forma de evitar errores es colocarlo en un try...catch
bloque de código.
función asíncrona main () { tratar { const val1 = aguardar firstStep (); const val2 = esperar segundo paso (val1); const val3 = esperar tercer paso (val1, val2); console.log ('Final:', val3); } atrapar (err) { console.error (err); } }
Puntos de atención :
- Es mejor poner el
await
comando en eltry...catch
bloque de código await
Operaciones asincrónicas detrás de múltiples comandos, si no hay una relación secundaria, es mejor dejar que se activen al mismo tiempo.
// Escribiendo uno let [foo, bar] = espera Promise.all ([getFoo (), getBar ()]); // escribiendo dos let fooPromise = getFoo (); let barPromise = getBar (); let foo = espera fooPromise; let bar = wait barPromise;
await
Los comandos solo se pueden usar enasync
funciones. Si se usan en funciones ordinarias, se informará un error.