La devolución de llamada no es un problema, el infierno de devolución de llamada es el problema.
Supongamos que necesitamos hacer tres llamadas al servidor para obtener A, B, C y D con la ayuda de las funciones getA, getB, getC y getD.
En codificación síncrona hacemos.
- Cómo realizar la validación de un correo electrónico ingresado en un formulario usando PHP
- Cómo hacer una página de inicio de sesión Java
- ¿Necesita tener un certificado para obtener un trabajo como desarrollador web front-end?
- ¿Qué son las variables de tiempo de ejecución? ¿Cómo se configura la variable de tiempo de ejecución?
- ¿Qué marco de trabajo de JavaScript debería integrar en un inicio web que ya usa Rails y una gran cantidad de jQuery (y bibliotecas que dependen de él)?
var A = getA (); var B = getB (A); var C = getC (B); var D = getD (C);
En la codificación asincrónica como en JavaScript tenemos que:
getA (función (A) { getB (A, función (B) { getC (B, función (C) { getD (C, función (D) { // algún código }); }); }); });
Como puede ver en el código anterior, se vuelve muy complicado entender y depurar el código. Esto es de lo que todos se quejan en JavaScript.
El estilo asíncrono de codificación no es el estilo natural de codificación. Es difícil de comprender para las personas nuevas en JavaScript.
El bucle de eventos de JavaScript es de un solo subproceso. Funciona de forma asincrónica. Los navegadores son la plataforma más grande para ejecutar aplicaciones en la fecha de hoy. Los navegadores se escriben una vez ejecutados en cualquier lugar en su sentido más verdadero.
Ahora vea ¿Cómo lidiar con el infierno de devolución de llamada en JavaScript?
- Promesas: el objeto Promesa se utiliza para cálculos diferidos y asincrónicos.
- caolan / async: Async es un módulo de utilidad que proporciona funciones directas y potentes para trabajar con JavaScript asincrónico. Aunque originalmente se diseñó para usar con Node.js y se puede instalar a través de npm install async, también se puede usar directamente en el navegador.
Lectura adicional: promesa