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()ydeferred.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:
-
always()-
done()/fail()-
Callbacks.add()-
list.push()- La función de devolución de llamada selist.push()al final de la lista.
-
-
-
Y aquí está la pila de llamadas para resolver / rechazar el objeto aplazado:
-
resolve()/reject()-
resolveWith()/rejectWith()-
Callbacks.fireWith()-
Callbacks.fire()- Las devoluciones de llamada en la lista se ejecutan en orden FIFO utilizando un ciclofor.
-
-
-