Domanda

Sto scoprendo Kris Kris Koval Q Library e ho un problema.Guarda questo codice semplice:

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

Mi aspetto di vedere:

Promise 1 OK
Promise 2 Failed
.

e poi mostra Alert "Fail!", ma l'avviso non mostra mai.Invece di vedere avvertimento nella mia console:

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

Perché il rifiuto non viene gestito e come posso gestirlo?

È stato utile?

Soluzione

Nella funzione then, è necessario passare solo la funzione getPromise2, non il risultato di getPromise2()

getPromise1()
    .then(getPromise2)            // NOTE: We are not calling it here
    .fail(function () {
        console.log('Fail!');
    })
    .done();
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top