Как получить информацию об исключении при использовании q.js

Следующий код отлично работает без исключения, и если в функциональной панели есть исключение, программа только что завершилась без какого-либо вывода. Я проверил исходный код Q, он ловит исключение и отклоняет его. Потратил некоторое время, но до сих пор не знаю, как правильно получить информацию об исключении.

function foo(val) {
    var deferred = Q.defer();
    if (val) {
        deferred.resolve(val);
    } else {
        deferred.reject(val);
    }

    return deferred.promise;
}

function bar() {
    var deferred = Q.defer();
    foo(true)
    .then(function(res) {
        throw new Error('true error!');
        deferred.resolve(true);
    }, function(err) {
        throw new Error('false error!');
        deferred.reject(false);
    });

    return deferred.promise;
}

bar()
.then(function(res) {
    console.log('true');
}, function(err) {
    console.log('false');
})
.done();

person yyhuang    schedule 19.11.2013    source источник
comment
Проверьте этот вопрос, который похож на ваш.   -  person Paul Mougel    schedule 19.11.2013
comment
Спасибо. Мое намерение состоит не в том, чтобы генерировать исключение, а в том, чтобы обнаруживать исключения, созданные другим API.   -  person yyhuang    schedule 19.11.2013


Ответы (1)


Во-первых, deferred, обещание которого вы возвращаете из bar(), никогда не разрешается и не отклоняется (все, что вы делаете, это создаете его в первой строке, ничего с ним не делаете и возвращаете обещание в последней строке)

Предположим, вы исправили это следующим образом: http://jsfiddle.net/KW9d9/

function bar() {
  var promise = foo(true);

Теперь (в конце вашего кода) вы все еще ищете ошибки не в обещании, в котором они запущены. При вызове .than в нашем первом обещании возвращается новое обещание. Думайте о том, что «тогда» создает новое обещание, обертывающее предыдущее. Такое исправление даст нам исключение, генерируемое в нашем обещании 'then', поскольку исключения, генерируемые в обработчиках then, используются как значение отклонения. Посмотрите: http://jsfiddle.net/ybefw/

function bar() {  
  return foo(true).then(function(res) {....
person Asaf    schedule 05.12.2013