method done await async jquery promise deferred

done - secuencia de ejecución de devolución de llamada diferida de jQuery



jquery submit promise (2)

La promesa diferida de jQuery tiene dos resultados: resuelto y rechazado. Puede adjuntar devoluciones de llamada al Diferido asociadas a cualquiera de los estados. Las condiciones para el archivo adjunto están hechas (asociadas con resueltas), fallidas (asociadas con rechazadas) y siempre (asociadas con ambos estados). Intenté sin éxito determinar la secuencia de las devoluciones de llamada cuando el estado pasa de pendiente a no pendiente; es decir, para done y always (o fail and always), ¿cuál es la secuencia en la que se ejecutan las devoluciones de llamada para cada estado de resolución y rechazo?


Los objetos diferidos procesan sus devoluciones de llamada en el orden en que la devolución de llamada se agregó al objeto diferido . No hay precedencia para done() sobre always() , o viceversa. El comportamiento es idéntico si llama a resolved() o reject() .

Por favor vea el siguiente ejemplo jsfiddle .

Los comentarios sobre la pregunta original no son correctos, o al menos no son completamente correctos.


@ La respuesta de Malcolm es correcta. Los documentos lo mencionan en muchos lugares, incluidos:

  • deferred.done() y deferred.fail() - "Las devoluciones de llamada se ejecutan en el orden en que se agregaron".
  • deferred.always() - "Cuando el Deferred se resuelve o rechaza, las devoluciones de llamada se ejecutan en el orden en que se agregaron"
  • jQuery.ajax() - "Promesa devolución de llamada - .done() , .fail() , .always() , y .then() - se invocan, en el orden en que están registrados."

Detalles de implementacion

En cuanto al módulo Deferred , utiliza el módulo Callbacks que implementa una "lista de devolución de llamada" FIFO.

Aquí está la pila de llamadas para agregar devoluciones de llamada a un objeto aplazado:

Y aquí está la pila de llamadas para resolver / rechazar el objeto aplazado: