Una devolución de llamada es una función que se llama al finalizar una operación determinada. Esto evita el bloqueo de código.
Uno de los problemas obvios con las devoluciones de llamada es cuando tienes múltiples operaciones asincrónicas que dependen unas de otras. Por lo tanto, tendrá devoluciones de llamada, anidadas dentro de devoluciones de llamada, anidadas dentro de devoluciones de llamada, etc.
La función isUserExists (id, devolución de llamada) { getDatabase (función (db) { getUser (db, 'usuarios', id, función (usuario) { var encontrado = (usuario)? verdadero Falso; devolución de llamada (encontrado); }) }) }
Las promesas, por otro lado, son objetos que representan el resultado de una operación asincrónica.
- ¿Cuáles son las características de Bootstrap?
- ¿Qué es mejor: sitio web móvil o sitio web receptivo? ¿Por qué?
- Cómo integrar un motor de reservas de hoteles B2B
- ¿Cuántos idiomas conocen los desarrolladores web antes de solicitar un trabajo? ¿Cuánto tiempo tomó aprenderlos?
- ¿Cuál es la mejor / más rápida / más potente plataforma de E / S sin bloqueo impulsada por eventos NodeJS o ReactPHP? O tal vez otra plataforma?
Utilizan las devoluciones de llamada para proporcionar una forma mejor y más fácil de manejar la operación asincrónica, y resuelven el problema de las devoluciones de llamada anidadas (usando then()
), y el manejo de errores se vuelve menos doloroso (usando .error()
y .catch()
).
La función isUserExists (id) { return getDatabase (). then (function (db) { return getUser (db, 'usuarios', id); }). luego (función (usuario) { volver (usuario)? verdadero Falso; }). catch (función (e) { // identificador de error }); } // Ahora podemos obtener el valor resuelto por el objeto de promesa // devuelto por el método then () en la función isUserExists (). isUserExists.then (function (userExists) { // realiza el trabajo de la función callback () en el ejemplo anterior aquí. }); // La promesa función getDatabase (datos) { return new Promise (función (resolver, rechazar) { // realiza cualquier operación asincrónica y comprueba si se devuelve el error if (error) rechazar (error); de lo contrario resolver (db); }); }
Nota: El método then()
devuelve una promesa. Si el método del controlador devuelve un valor, la promesa devuelta por then()
se resuelve con el valor devuelto como su valor. Y si devuelve una promesa ya resuelta, la promesa devuelta para then()
se resuelve con el valor de esa promesa como su valor.