Вопрос

Я открываю для себя Q-библиотеку Криса Коваля, и у меня возникла проблема.Посмотрите на этот простой код:

function getPromise1() {
    var deferred = Q.defer();
    setTimeout(function () {
        console.log('Promise 1 OK');
        deferred.resolve();
    }, 1000);
    return deferred.promise;
}


function getPromise2() {
    var deferred = Q.defer();
    setTimeout(function () {
        console.log('Promise 2 Failed');
        deferred.reject();
    }, 1000);
    return deferred.promise;
}

getPromise1()
    .then(getPromise2())
    .fail(function () {
        alert('Fail!');
    })
    .done();

Я ожидаю увидеть:

Promise 1 OK
Promise 2 Failed

а затем показывается предупреждение "Сбой!", но предупреждение так и не появляется.Вместо этого я вижу предупреждение в своей консоли:

[Q] Unhandled rejection reasons (should be empty): ["(no stack) undefined"] 

Почему отказ не обрабатывается и как я могу с этим справиться?

Это было полезно?

Решение

В then функцию, вы должны передать только getPromise2 функция, а не результат getPromise2()

getPromise1()
    .then(getPromise2)            // NOTE: We are not calling it here
    .fail(function () {
        console.log('Fail!');
    })
    .done();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top