De the documentation on jQuery.when
En el caso-Deferreds múltiples, donde se rechaza una de las Deferreds, jQuery.when se activa inmediatamente los failCallbacks para su amo Diferido. Tenga en cuenta que algunos de los aplazados aún no se han resuelto en ese momento. Si necesita realizar un procesamiento adicional para este caso, como cancelar cualquier solicitud ajax sin terminar, puede mantener referencias a los objetos jqXHR subyacentes en un cierre e inspeccionarlos/cancelarlos en failCallback.
En otras palabras, se supone que debe mantener las referencias a cada solicitud y verificarlas manualmente usted mismo, si es necesario.
La dificultad es que cuando la devolución de llamada falla se llama, de cualquier número de diferidos, pueda todavía ser excepcional , por tanto, en ese estado no tienen ni fracasado ni tenido éxito.
Deseo que la documentación explicada sea un poco mejor en cuanto a lo que se pasa al manejador de errores en este caso. A juzgar por el código fuente, sin embargo, parece que los argumentos recibidos por los manipuladores de fallar dependen de qué diferido falla en primer lugar:
args[ i ].promise().then(resolveFunc(i), deferred.reject);
No soy un experto en el funcionamiento interno de jQuery, pero creo que esto simplemente le permite a cada uno de sus de diferidos llame al método "maestro" Deferred reject
con los argumentos que normalmente pasaría a sus manejadores. No es ideal, si me preguntas ... pero entonces podría estar malinterpretando esto.
me pregunto si se referían a esto, sin embargo:
args[ i ].promise().then(resolveFunc(i), func() { deferred.reject(args); });
has necesitado sólo hacer uno a la vez? – locrizak
@locrizak - Imagine una aplicación que solicita 'foo' y 'bar' al mismo tiempo, pero necesita que ambos vuelvan con éxito antes de procesarlos. – Javier
¿Por qué no hacer que tanto foo como la barra devuelvan verdadero o falso dependiendo de su éxito o fracaso, llame a ambas funciones y guarde sus devoluciones en variables separadas? de esa manera puede exigir que ambos sean ciertos y, de no ser así, verificar cuál de los dos era falso. – eagerMoose