2015-09-16 3 views
0

Мне нужно поймать ошибку и отклонить цепочку обещаний ниже.Поймать ошибку и отклонить обещание

Как это

var deferred = new $.Deferred(); 
deferred.resolve(); 

deferred.then(function() { 
    try { 
    throw new Error(); 
    } catch (err) { 
    return $.Deferred().reject(); 
    } 
}).then(function() { 
    console.log('success', arguments); 
}, function() { 
    console.log('fail', arguments); 
}); 

быть сделаны отвергнута в JQuery? Я ожидал бы fail, но есть success.

+1

Какая версия JQuery? – guest271314

+0

@ guest271314 Я думаю, это был ответ, мой был слишком стар (1.7). У вас есть идея, когда они фиксируют обещания? Является ли код в ответе более отказоустойчивым (по-прежнему не работает на 1.7, хотя). – estus

+0

Не уверен в значении _ «Является ли код в ответе более отказоустойчивым? _? Из документации http://api.jquery.com/deferred.then/ были внесены изменения в 'deferred.then()' в 1.8 http://blog.jquery.com/2012/08/09/jquery-1- 8-release/http://bugs.jquery.com/ticket/11010 – guest271314

ответ

1

Попробуйте использовать JQuery версии 1.8 см deferred.then(), jQuery 1.8 Released, MAKE DEFERRED.THEN == DEFERRED.PIPE LIKE PROMISE/A

var deferred = new $.Deferred(); 
 
deferred.resolve(); 
 

 
deferred.then(function() { 
 
    try { 
 
    throw new Error(); 
 
    } catch (err) { 
 
    return $.Deferred().reject(); 
 
    } 
 
}).then(function() { 
 
    console.log('success', arguments); 
 
}, function() { 
 
    console.log('fail', arguments); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"> 
 
</script>

+0

@estus См. Обновленное сообщение. Правильный ответ - использование версии 1.8 или выше jQuery. – guest271314