2013-04-03 1 views
2

От deferred.fail()page:Что означает «отклонение» для объектов дефферируемых объектов, отличных от jqXHR?

Описание: Добавить обработчики будут вызываться, когда Отложенный объект отвергнуто.

и exmple:

$.get("test.php") 
.done(function(){ alert("$.get succeeded"); }) 
.fail(function(){ alert("$.get failed!"); }); 

Как мы знаем, мы можем создать var someObject = $.Deferred();

Мои вопросы:

  • Как мы можем 'Отклонить' отложенное, если это не jqXHR?

  • Как реализовать deferred.fail() для отложенных объектов, отличных от jqXHR?

Спасибо.

Да, я знаю, что мой английский плохой.

+0

английский прибрано :) –

ответ

1

Отложенный объект отклоняется, когда на него вызывается либо .reject(), либо .rejectWith().

Вот пример:

var deferred = $.Deferred(); 
deferred 
    .done(function() { console.log('done') }) 
    .fail(function() { console.log('failed') }); 

deferred.resolve(); // <-- will write 'done' to console 
deferred.reject(); // <-- will write 'failed' to console 

Вы можете использовать deferreds, чтобы сделать асинхронные функции ведут себя как $.get() делает. Например setTimeout:

function MyTimeout() { 
    var deferred = $.Deferred(); 

    setTimeout(function() { 
    // as a demo, this will reject the deferred half the time 
    if (Math.random() < 0.5) 
     deferred.reject(); 
    else 
     deferred.resolve(); 
    }, 2000); 
    return deferred.promise(); 
} 

MyTimeout() 
    .done(function() { console.log('done') }) 
    .fail(function() { console.log('failed') }); 

Последнее утверждение можно записать в виде:

MyTimeout().then(
    function() { console.log('done') }, 
    function() { console.log('failed') } 
);