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.

questionAnswers(2)

yourAnswerToTheQuestion