Slib splnil Navzdory odmítnutí

hlasů
1

Já používám bluebird metody usadit kontrolovat výsledky za sliby, bez ohledu na případné zamítnutí. V secondMethod jsem odmítl slib stále jsem si isFulfilled () pravdivé.

var Promise = require('bluebird');

Promise.settle([firstMethod, secondMethod]).then(function(results){
    console.log(results[0].isFulfilled()); 
    console.log(results[1].isFulfilled()); 
   // console.log(results[1].reason());
}).catch(function(error){
    console.log(error);
});

    var firstMethod = function() {
   var promise = new Promise(function(resolve, reject){
      setTimeout(function() {
         resolve({data: '123'});
      }, 2000);
   });
   return promise;
};


var secondMethod = function() {
   var promise = new Promise(function(resolve, reject){
      setTimeout(function() {
         reject((new Error('fail')));
      }, 2000);
   });
   return promise;
};
Položena 13/11/2017 v 05:58
uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

Jistá, že isFulfilledmá na mysli, zda je kompletní nebo ne, bez ohledu na to, jestli je to resolvednebo rejected.

Můžete použít něco jako isRejectedpro kontrolu, zda je slib byl odmítnut.

Odpovězeno 13/11/2017 v 06:00
zdroj uživatelem

hlasů
1

settleAPI se již nepoužívá. Postoupit GitHub odkaz a to za info. Použít reflectAPI místo jak uvedl v dokumentaci.

Za druhé, dokumentace poukazuje na příkladu:

Používání .reflect()implementovat settleAll(vyčkejte, dokud se všechny sliby v poli jsou buď zamítnuty nebo splněno) funkčnosti

var promises = [getPromise(), getPromise(), getPromise()];
Promise.all(promises.map(function(promise) {
    return promise.reflect();
})).each(function(inspection) {
    if (inspection.isFulfilled()) {
        console.log("A promise in the array was fulfilled with", inspection.value());
    } else {
        console.error("A promise in the array was rejected with", inspection.reason());
    }
});

Vysvětlení výše uvedený kód:

Ve výše uvedeném příkladu je autor iterace řady slibů využitím mapkterá vrací reflecta kontrolou každého slib je isRejectednebo isFulfilled.

Odpovězeno 13/11/2017 v 06:17
zdroj uživatelem

hlasů
2

ladil jsem svůj kód a kód v rámci svých funkcí není volána. Musíte skutečně volání funkce :)

Promise.settle([firstMethod(), secondMethod()]).then(function (results) {
    console.log(results[0].isFulfilled()); // prints "true"
    console.log(results[1].isFulfilled()); // prints "false"
    console.log(results[1].reason()); // prints "fail"
}).catch(function (error) {
    console.log(error);
});
Odpovězeno 13/11/2017 v 06:23
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more