próba przerwania łańcucha obietnic jQuery za pomocą .then, .fail i .reject
Aktualizacja: ten problem był wynikiem jQuery 1.7 vs 1.8. Nigdy nie używaj obietnic w 1.7, ponieważ nie można ich przypisać do sieci, zwracając obietnicę wewnątrz.then
. 1.8 wygląda na to, że nie zepsuły go.
http://jsfiddle.net/delvarworld/28TDM/
// make a promise
var deferred = $.Deferred();
promise = deferred.promise();
// return a promise, that after 1 second, is rejected
promise.then(function(){
var t = $.Deferred();
setTimeout(function() {
console.log('rejecting...');
t.reject();
}, 1000);
return t.promise();
});
// if that promise is successful, do this
promise.then(function() {
console.log('i should never be called');
})
// if it errors, do this
promise.fail(function() {
console.log('i should be called');
});
deferred.resolve();
Oczekiwano: „powinienem zostać nazwany”
Rzeczywisty: „nigdy nie powinienem być nazywany”
Problem: Chcę powiązać wywołania zwrotne i umożliwić jednemu z nich przerwanie łańcucha i wyzwoleniefail
funkcja i pomiń inne powiązane wywołania zwrotne. Nie rozumiem, dlaczego wszystkie potem są wyzwalane, a niepowodzenie nie jest wyzwalane.
Pochodzę z biblioteki Q NodeJS, więc spróbowałem.then
pierwszy. Jednak zmiana na.pipe
nie działa.