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
.
-
-
-