Red de conocimiento informático - Material del sitio web - Cómo manejar con elegancia los errores de espera asíncronos: interpretación de la pequeña y hermosa biblioteca awaitjs

Cómo manejar con elegancia los errores de espera asíncronos: interpretación de la pequeña y hermosa biblioteca awaitjs

Recientemente he estado leyendo los códigos de algunos paquetes npm excelentes. La razón es que siento que el código que escribo ahora no está lo suficientemente estandarizado y conciso.

Pero no sé qué tipo de código es mejor. Después de pensarlo, creo que todavía tengo que estar sobre los hombros de gigantes.

Al leer un código fuente excelente y aprender a escribir código agradable, finalmente escriba un artículo y un resumen del capítulo para ordenar todo el proceso de aprendizaje y compartirlo con otros.

¿Por qué escribir tanto al principio? Porque necesito encontrar una razón para persistir. Sólo así podré cabalgar sobre el viento y las olas y avanzar con valentía.

Sin más, comencemos con el resumen.

Antes de presentar formalmente la biblioteca await-to-js, repasemos brevemente la evolución de la programación asincrónica en el lenguaje JavaScript. Antes de que apareciera Promise, la programación asincrónica siempre había sido un gran problema y los ingenieros de front-end con problemas en ese momento a menudo podían ver el siguiente código.

Este tipo de código con devoluciones de llamada anidadas en devoluciones de llamada que se extienden tanto vertical como horizontalmente también se denomina infierno de devolución de llamada. Se puede ver lo repugnante que es esto. Específicamente, tiene las siguientes deficiencias:

Promise es una elegante solución de programación asincrónica. Desde una perspectiva sintáctica, es un objeto que representa la finalización o falla final de una operación asincrónica. Desde una perspectiva semántica, es una promesa que promete brindarle un resultado después de un período de tiempo.

Dado que su prototipo existe entonces, captura y finalmente devolverá una nueva promesa, nos permite encadenar llamadas, resolviendo el problema del tradicional infierno de devolución de llamadas.

Dado que tiene el método all, puede admitir múltiples solicitudes simultáneas y obtener datos en solicitudes simultáneas.

Con Promise, el código anterior se puede escribir de la siguiente manera.

En comparación con el infierno de devolución de llamadas anterior, usar Promise puede ayudarnos a hacer que el código solo se desarrolle verticalmente y proporcionar devoluciones de llamada para manejar errores. Evidentemente mucho más elegante. Pero incluso si Promise es tan bueno, todavía hay dos deficiencias.

La función asíncrona es el azúcar sintáctico de la función Generador. Utilice la palabra clave async para indicarlo y utilice await dentro de la función para indicar asincrónico. En comparación con Generator, la mejora de la función asíncrona radica en los siguientes cuatro puntos:

El resumen aquí proviene de: Comprender async/await[1]

Con async/await, lo anterior código Se puede reescribir de la siguiente manera

Al mismo tiempo, podemos realizar el manejo de errores para cada operación asincrónica

De esta manera, ¿se pueden optimizar las dos deficiencias de Promise anteriores? ¿arriba? Entonces, async/await es la solución final para la escritura asincrónica en JS. Personalmente creo que no hay ningún problema, pero no sé si miras el código anterior y usas try/catch para el manejo de errores para cada operación asincrónica. ¿No es lo suficientemente conveniente? ¿Qué pasa con la inteligencia?

Así es como el autor presenta esta biblioteca

La traducción al chino es

Aquí hay una comparación simple. , manejamos errores en operaciones asincrónicas. El método es así

Después de usar await-to-js, podemos manejar errores como este

¿No es mucho más simple? p>

Autor ¿Qué tipo de magia negra se utilizó?

Puede que no lo creas, pero el código fuente solo tiene 15 líneas.

Lo anterior es el código fuente de la versión TS, pero considerando que es posible que algunos estudiantes no hayan estado expuestos a TS, me centraré en analizar el código fuente de la versión JS a continuación.

Aquí primero dejamos a un lado el texto de error personalizado errorExt. El código principal es así

Se puede ver que la lógica del código se explica en chino así

Después del análisis anterior, podemos concluir que no existe magia negra en el mundo. No hay nada que no puedas hacer, sólo que no puedas pensar.

Aquí miramos el segundo parámetro errorExt de la función. No es difícil encontrar que esto en realidad se usa para obtener información de error definida por el usuario. A través de Object.assign, el error y el usuario normalmente devueltos. -suma definida Combinada en un objeto para que los usuarios elijan.

El código fuente no da miedo, lo que da miedo es tu propio miedo a afrontar lo desconocido.

Solo teniendo el coraje de afrontar e intentar se puede llegar a un nivel superior.

Sigue con el buen trabajo, jovencito.

[1]

?target=%2Fa%2F1190000010244279

[2]

Cómo escribir async await sin try-catch bloques en Javascript: https://blog.grossman.io/how-to-write-async-await- without-try-catch-blocks-in-javascript/