w3schools sincronas promises promesas nodejs funciones encadenar encadenamiento anidadas javascript jquery breeze promise q

javascript - sincronas - Use jQuery o Q.Js para hacer promesas



promise typescript (3)

Estoy buscando en BreezeJs y hay ejemplos que están usando Q.js para promesas de manejar llamadas asincrónicas. John Papa también está utilizando Q. JQuery también tiene promesas . ¿Cuáles son las diferencias entre los dos?



La respuesta de Bergi cubre las cosas bastante bien. Quería agregar, sin embargo, que hemos creado una guía para usuarios de Q provenientes de jQuery . Para resumir las secciones relevantes:

  • Q maneja excepciones, lo que le permite manejar todos los errores a través de una interfaz uniforme.
  • Q se enfoca en encadenar con todos sus métodos, mientras que jQuery solo permite el encadenamiento desde then / pipe .
  • Q promete garantizar la asincronía, evitando así los riesgos de flujo de control y las condiciones de carrera que resultan del comportamiento a veces sincronizado ya veces asíncrono de jQuery.
  • Las promesas Q siempre se cumplen con un solo valor o se rechazan con un único motivo, al igual que las funciones sincrónicas siempre devuelven un solo valor o lanzan una única excepción.
  • Q impone una separación entre el diferido y la promesa, mientras que jQuery los fusiona en un objeto con la opción de separarlos.
  • Q no rastrea un objeto de contexto junto con el cumplimiento o el rechazo, ya que este no tiene paralelo para las funciones sincrónicas (es decir, nunca devuelve un valor tan bien como el que debe ejecutar el llamante). Por lo tanto, no hay ninguna resolveWith o rejectWith .
  • Q usa la terminología Promises / A +; la principal diferencia es que Q usa "cumplido" donde jQuery usa "resuelto", y en Q "resuelto" significa algo más sutil.

La guía también contiene una tabla paralela a las API jQuery y Q promise.


Ambos se basan en el estándar Promises / A e implementan un método then (aunque solo jQuery actual, una vez tenían un pipe incompatible en lugar de otro). Sin embargo, hay algunas diferencias:

  • Q tiene manejo de excepciones. Todos los errores arrojados en la asincrónica then devoluciones de llamada se detectarán y rechazarán la promesa (y solo se volverán a lanzar si llama a .end() ). No estoy seguro si personalmente me gusta eso. Es la forma estandarizada que jQuery no sigue, rechazar desde then en jQuery diferido es mucho más complicado .
  • Las promesas de Q se resuelven con un solo valor / razón (como si lo devolviera / lo arrojara a partir de then ), mientras que jQuery permite múltiples argumentos en las llamadas de resolve / reject en sus Deferreds.
  • Q tiene muchos métodos Proxy que le permitirán modificar los valores futuros
  • Q tiene .all y similar, que son más complicados con jQuery ( $.when.apply($, […]) ).
  • Q funciona explícitamente con ticks en el ciclo de eventos y garantiza la asincronía, mientras que jQuery también puede ser síncrono. Esto ahora es requerido por la especificación Promises A / + .

... que es básicamente Promises/B Como puede ver, la Q API es más poderosa y está (mejor) diseñada. Dependiendo de lo que quieras hacer, Q podría ser la mejor opción, pero tal vez jQuery (especialmente si ya está incluido) sea suficiente.