попытка разорвать цепочку обещаний jQuery с помощью .then, .fail и .reject

Обновление: эта проблема была результатом jQuery 1.7 против 1.8. Никогда не используйте обещания в 1.7, потому что они не могут быть связаны с возвратом обещания внутри.then, 1.8 похоже, что они не испортили это.

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();

Ожидаемый: «я должен называться»

Фактически: «меня никогда не должны называть»

Problem: Я хочу связать обратные вызовы, и любой из них сможет разорвать цепочку и вызватьfail функция, и пропустить другие цепные обратные вызовы. Я не понимаю, почему все эти события сработали, а сбой не сработал.

Я пришел из библиотеки Q NodeJS, поэтому я попробовал ее с.then первый. Тем не менее, изменив его на.pipe не имеет никакого эффекта

Ответы на вопрос(2)

Ваш ответ на вопрос