Pregunta

Por lo que he entendido que hay tres maneras de llamar a un código asíncrono:

  1. Eventos, por ejemplo request.on("event", callback);
  2. devoluciones de llamada, por ejemplo, fs.open(path, flags, mode, callback);
  3. Promises

nodo-promesa biblioteca pero no lo consigue.

Podría alguien explicar qué promesas son todo alrededor y por qué debería utilizarlo?

Además, ¿por qué se retira de Node.js?

¿Fue útil?

Solución

Las promesas en Node.js prometidos para hacer algún trabajo y luego tuvieron devoluciones de llamada separados que serían ejecutados por el éxito y el fracaso, así como los tiempos de espera de manipulación. Otra forma de pensar de las promesas en Node.js es que eran emisores que pueden emitir sólo dos eventos:. El éxito y error

Lo bueno de promesas es que puede combinarlos en cadenas de dependencia (ver Promise C sólo cuando prometen un y Promise B completa).

Por sacarlos de las centrales Node.js, creó posibilidad de construir módulos con diferentes implementaciones de promesas que se pueden sentar en la parte superior del núcleo. Algunos de estos son nodo-promesa y futuros .

Otros consejos

Dado que esta cuestión todavía tiene muchos puntos de vista (como el mío) quería señalar que:

  1. nodo-promesa parece bastante muerto para mí (la última confirmación fue hace aproximadamente 1 año) y contiene casi sin pruebas.
  2. El Los futuros miradas módulo muy hinchado a mí y está muy documentado (y creo que las convenciones de nomenclatura son sólo mala)
  3. El mejor camino a seguir parece ser el q marco, que es a la vez activo y bien documentada.

Una promesa es una "cosa" que representa los resultados "eventuales" de una operación por así decirlo. El punto a destacar aquí es que, se abstrae los detalles de cuando de que ocurra algo y le permite centrarse en lo que debe suceder después que algo sucede. Esto dará lugar a un código limpio, fácil de mantener, donde en lugar de tener una devolución de llamada dentro de una devolución de llamada dentro de una devolución de llamada, el código se verá algo como:

 var request = new Promise(function(resolve, reject) {
   //do an ajax call here. or a database request or whatever.
   //depending on its results, either call resolve(value) or reject(error)
   //where value is the thing which the operation's successful execution returns and
   //error is the thing which the operation's failure returns.
 });

 request.then(function successHandler(result) {
   //do something with the result
 }, function failureHandler(error) {
  //handle
 });

estados de especificaciones de las promesas de que es una promesa

then

método debe devolver una nueva promesa que se cumple cuando el successHandler dado o la devolución de llamada failureHandler ha terminado. Esto significa que se pueden encadenar juntos promesas cuando se tiene un conjunto de tareas asíncronas que deban llevarse a cabo y estar seguro de que está garantizada la secuencia de las operaciones al igual que si se hubiera usado devoluciones de llamada. Así que en lugar de pasar una devolución de llamada dentro de una devolución de llamada dentro de una devolución de llamada, el código con miradas promesas encadenados como:

var doStuff = firstAsyncFunction(url) {
                return new Promise(function(resolve, reject) {
                       $.ajax({
                        url: url,
                        success: function(data) {
                            resolve(data);
                        },
                        error: function(err) {
                             reject(err); 
                        } 
                  });
               };
doStuff
  .then(secondAsyncFunction) //returns a promise
  .then(thirdAsyncFunction); //returns a promise

Para saber más acerca de las promesas y por qué son fresco, el blog súper pago y envío de Domenic: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/

tutorial sobre Promesas del autor de PouchDB es probablemente el mejor que he visto en cualquier lugar. Cubre con prudencia los errores de novato clásicos que muestran patrones de uso correctas e incluso algunos anti-patrones que son todavía de uso común - incluso en otros tutoriales !!

Disfrute!

PS no contesté algunas otras partes de esta pregunta, ya que han sido bien cubiertas por otros.

tiene una serie de videos , cada uno de ellos menor de diez minutos de duración, que describe cómo funciona la biblioteca WinJS promesa.

Estos videos son bastante informativo, y Mike se las arregla para mostrar el poder de la API de Promise con unos pocos ejemplos de código así-elegido.

var twitterUrl = "http://search.twitter.com/search.json?q=windows";
var promise = WinJS.xhr({ url: twitterUrl });

 promise = promise.then(
     function (xhr) {
     },
     function (xhr) {
         // handle error
     });

El tratamiento de cómo las excepciones se tratan es particularmente buena.

A pesar de las referencias WinJs, esta es una serie de vídeo interés general, porque el API Promise es ampliamente similar a través de sus muchas implementaciones.

de RSVP es una ligera aplicación promesa que pasa el / A + prueba de la promesa suite. Me gusta bastante la API, ya que es similar en estilo a la interfaz WinJS.

Actualizar Abr-2014

A propósito, los WinJS biblioteca está ahora abierto fuente .

Otra de las ventajas de las promesas es que el control de errores y lanzar una excepción y la captura es mucho mejor que tratar de manejar eso con devoluciones de llamada.

bluebird implementos biblioteca promesas y le ofrece grandes trazas de pila larga, es muy rápido, y advierte acerca errores no capturados. También es más rápido y usa menos memoria que las otras bibliotecas de promesa, de acuerdo con http://bluebirdjs.com/docs /benchmarks.html

¿Qué es exactamente una promesa?

Una promesa es simplemente un objeto que representa el resultado de una operación asíncrona. Una promesa puede estar en cualquiera de los siguientes 3 estados:

pendientes :: Este es el estado inicial, significa la promesa no se ha cumplido ni rechazada.

cumplido :: Esto significa que la promesa se ha cumplido, significa el valor representado por la promesa está listo para ser utilizado.

rechazado :: Este medio de las operaciones fallidas y, por tanto, no pueden cumplir la promesa. Aparte de los estados, hay tres importantes entidades asociadas a las promesas que realmente necesita para entender

  1. función de ejecutor función :: ejecutor define el funcionamiento asíncrono, que necesita ser realizada y cuyo resultado está representado por la promesa. Se inicia la ejecución tan pronto como el objeto de la promesa se ha inicializado.

  2. determinación :: determinación es un parámetros pasados ??a la función de ejecutor, y en caso de que el ejecutor se ejecuta correctamente, entonces esto se llama determinación pasando el resultado.

  3. :: rechazar rechazar es otro parámetro que se pasa a la función de ejecutor, y que se utiliza cuando la función de ejecutor falla. La causa de fallo se puede pasar a la rechazan.

Así que cuando creamos un objeto de la promesa, que hemos de proporcionar Ejecutor, Resolve y Rechazar.

promesas

También he estado mirando en promesas en Node.js recientemente. Hasta la fecha el when.js parece ser el camino a seguir, debido a su velocidad y el uso de recursos, pero el documentación sobre q.js me dio mucha mejor comprensión. Por lo tanto el uso when.js pero los documentos q.js a entender el tema.

Desde el q.js readme en github:

  

Si una función no puede devolver un valor o una excepción y sin   bloqueo, puede devolver una promesa en su lugar. Una promesa es un objeto que   representa el valor de retorno o la excepción lanzada que la función   finalmente puede proporcionar. Una promesa también se puede utilizar como sustituto de una   objeto remoto para superar la latencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top