JavaScript se caracteriza por asíncrona. JavaScript no puede esperar. Si implementa algo que debe ser esperado, no puede detenerse allí y esperar a que regrese el resultado. Por el contrario, la conclusión es usar devolución de llamada: define una función, que solo puede llamarse hasta que el resultado esté disponible.
Este modelo de devolución de llamada no tiene ningún problema con una buena organización de código, pero también puede resolver muchos problemas cambiando de la devolución de llamada original a prometer. Trate la promesa como un contenedor de datos estándar, que simplificará su organización de código y se convertirá en una arquitectura basada en la promesa.
¿Qué es una promesa?
Una promesa es un objeto con el método ".Then ()", que representa el resultado de una operación que aún no se puede conocer. No importa quién acceda a este objeto, puede usar el método ".Then ()" para agregar una devolución de llamada para esperar a que un recordatorio espere a que la operación tenga un resultado o falla exitoso.
Entonces, ¿por qué los beneficios de hacer esto mejor que las devoluciones de llamada? El modo de devolución de llamada estándar requiere que proporcionemos funciones de devolución de llamada al mismo tiempo cuando procese las solicitudes:
solicitud (URL, función (error, respuesta) {// manejar el éxito o el error.}); dosomethingelse ();Desafortunadamente, este código significa que esta función de solicitud no sabe cuándo se completará solo y, por supuesto, no es necesario. Finalmente pasamos el resultado a través de la devolución de llamada. Esto hace que múltiples devoluciones de llamada formen devoluciones de llamada anidadas o trampas de devolución de llamada.
QUERTHEDATABASE (Query, Function (Error, Result) {request (url, function (error, respuesta) {doSomThingElse (respuesta, function (error, resultado) {doanotherthing (resultado, function (error, resultado) {request (otherUrl, function (error, respuesta) {...});});});});});La promesa puede resolver este problema al permitir que el código de bajo nivel cree una solicitud y luego devuelva un objeto, que representa una operación inacabada, permitiendo que la persona que llama decida qué devoluciones de llamada se deben agregar.
¿Qué es una promesa?
Promise es una abstracción de la programación asincrónica. Es un objeto proxy que devuelve un valor o lanza una excepción. En general, los objetos prometedor tienen un método entonces. Este método entonces es cómo obtenemos el valor de retorno (el valor de resultado de la implementación exitosa de la promesa se llama cumplimiento) o organizar una excepción (la razón para rechazar la promesa se llama rechazo). Luego, use dos devoluciones de llamada opcionales como parámetros, que podemos llamar Onfullfilled y OnRejed:
var promise = dosomethingaync ()
Promesa.
Cuando se resuelve esta promesa, es decir, después de que se complete el proceso asincrónico, se llamará onfullado y se llamará.
Por lo tanto, una promesa tiene los siguientes tres estados diferentes:
■ Pendiente de ser prometido - Estado inicial de promesa
■ Compromiso de implementación cumplida: un compromiso de compromiso exitoso estado de implementación
■ Rechazo rechazado del compromiso: un estado donde la promesa falló
Tomando el archivo de lectura como un caso, lo siguiente es lo que debe hacerse después de leer el archivo usando una devolución de llamada (impresión de salida):
readFile (function (err, data) {if (err) return console.error (err) console.log (data)})Si nuestra función de archivo de lectura devuelve una promesa, entonces podemos implementar la misma lógica de la siguiente manera (impresión de salida):
var promise = readfile ()
Promise.Then (console.log, console.error)
Aquí tenemos una promesa de valor que representa una operación asincrónica. Podemos aprobar esta promesa de valor todo el tiempo. Cualquiera que acceda a este valor puede usar para consumirlo. Independientemente de si la operación asincrónica representada por este valor se completa o no se completa, también podemos asegurarnos de que el resultado asincrónico no cambiará, porque la operación asincrónica representada por esta promesa solo se ejecutará una vez, y el estado se cumple o rechazará.
Comprender la promesa
La promesa puede ser diferente de la intuición diaria. Para comprenderlo, se deben tener en cuenta algunos principios importantes:. Then () siempre devuelve una nueva promesa. Como se muestra en el siguiente código:
var promise = readfile ()
var promise2 = promesa.then (readanotherfile, console.error)
Aquí el entonces parámetro ReadanotherFile, Console.Error representa la acción onfullida después de que la operación asíncrona sea exitosa o la acción realizada después de que la falla sea exitosa. Es decir, después de ejecutar la función ReadAnotherFile, de lo contrario, el registro de impresión fallido es incorrecto. Esta implementación solo es posible de dos maneras.
Veamos el siguiente código:
var promise = readFile () var promis2 = promise.then (function (data) {return readAnotherFile () // Si ReadFile sucdea, ejecute readAnotherFile}, function (err) {console.error (err) // Si readfile es exitoso, registro, pero aún así ejecute readanToTrenToNoTherFile ()})}) promise.then (consultora). Resultado de la ejecución de la función readanotherfilePorque luego devuelve una promesa, significa que la promesa se puede gastar encadenando la cadena en serie, lo que puede evitar el infierno de devolución de llamada:
readFile () .Then (ReadAnotherFile) .Then (DosomethingElse) .Then (...)
Hay dos partes de la regla de la promesa que deben separarse:
(1). Entonces () siempre devuelve una nueva promesa. Cada vez que lo llame, no importa lo que haga la devolución de llamada, porque .Then () ya le da una promesa antes de que se llame a la devolución de llamada. El comportamiento de la devolución de llamada solo afecta la implementación de la promesa de la promesa. Si la devolución de llamada devuelve un valor, la promesa usará ese valor. Si este valor es una promesa, devuelva el valor después de la implementación de la promesa a este valor. Si la devolución de llamada lanza un error, la promesa rechazará el error.
(2) La promesa devuelta por .Then () es una nueva promesa, que es diferente de las. Then () llamada. La larga cadena de promesas a veces oculta el hecho de que, pase lo que pase, cada llamado. Entonces () producirá una nueva promesa. Lo que debe tener en cuenta aquí es que lo que realmente debe considerar es que su última llamada .Then () puede representar una falla, por lo que si no capta esta falla, es fácil hacer que su excepción de error desaparezca.
Algunas personas piensan que la llamada de la cadena .Then () es muy similar al estilo fluido, pero la larga cadena de promesas será confusa y finalmente dividida en funciones significativas:
function getTasks () {return $ http.get ('http://example.com/api/v1/tasks') .Then (function (respuesta) {return respuesta.data;});} function getMyTasks () {return getTasks (). (function (tareas) {return filtTasks (tareas tasks, {propietario: usuario: user {return getTasks ().). });}En este ejemplo, las dos funciones obtienen una promesa, llevando una función de devolución de llamada.
Promesa interesante
La misma promesa puede aceptar cualquier cantidad de devoluciones de llamada. Cuando se resuelve e implementa una promesa, se llamarán a todas las funciones de devolución de llamada. Además, una promesa puede incluso aceptar una nueva devolución de llamada después de ser resuelta e implementada. Estas devoluciones de llamada se pueden llamar de manera normal, lo que nos permite usar devoluciones de llamada para implementar una forma simple de caché:
var tarea taskSpromise; función getTasks () {taskpromise = taskpromise || getTasksFromTheserver (); return tareaspromise;}En este caso, la función getTasks () se puede llamar en cualquier número de veces, siempre devuelve la promesa de los dientes de cobre, donde la función getTasksFromTheserver () solo se llama una vez.
El uso de NodeJs Promise anteriormente es todo el contenido que comparto con ustedes. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.