property - jquery list contains
jQuery aplazado: rechazar una promesa desde dentro de un filtro hecho (1)
En jQuery (a diferencia de otras bibliotecas), la transformación de una promesa de un estado "resuelto" a un estado "rechazado" es ligeramente detallada, y requiere la creación y el rechazo explícitos de un nuevo Aplazado.
function foo() {
return doAJAXRequest().then(function (data, textStatus, jqXHR) {
if (data.responseText == "YES") {
return doOtherAJAXRequest(data);
} else {
return $.Deferred().reject(jqXHR, data, ''Not YES'').promise();
}
});
)
Aquí, la promesa se devolvió si data.responseText !== "YES"
imita (en parte) una solicitud de ajax fallida, al tiempo que permite que se pasen los data
. Esto es (probablemente) importante para el controlador .fail()
descendente, que debe manejar tanto los fallos ajax genuinos como las condiciones de éxito transmogrificadas, sin saber cuál ocurrió hasta que se lee errorThrown
.
foo().fail(function(jqXHR, textStatus, errorThrown) {
if(errorThrown == ''Not YES'') {
//transmogrified success
var data = textStatus;
...
}
else {
//genuine ajax failure
...
}
});
En general, es más fácil pasar los data
de esta manera en lugar de volver a obtenerlos del objeto jqXHR. Esto es particularmente cierto con los datos codificados en JSON, que de otro modo tendrían que ser descodificados por segunda vez en el controlador de fallas.
Fyi, estoy empezando a aprender promesas jQuery, por lo que puedo estar un poco confundido aquí.
De todos modos, tengo una solicitud de AJAX que quiero rechazar dentro de un filtro hecho en función del contenido de la respuesta:
return doAJAXRequest().then(function (data) {
if (data.responseText == "YES") {
return doOtherAJAXRequest();
} else {
this.reject(data);
}
});
Eso no funcionó como esperaba
Uncaught TypeError: Object #<Object> has no method ''reject''
¿Cómo hago que esta promesa falle en función de su respuesta? ¿Es eso posible? ¿O simplemente estoy confundido acerca de lo que se debe hacer aquí?