Stavy promise v JavaScriptu
Promise může být v jednom ze tří stavů. Při vytvoření je promise čekající (pending), a pak se může stát splněným (fulfilled), čímž vrátí získaný výsledek, nebo zamítnutým (rejected), čímž vrátí důvod odmítnutí. Přechod z jednoho stavu do druhého můžete vidět spuštěním následujícího kódu:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // nastavte buď true, nebo false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // každou sekundu vypíšeme promise do konzole
}, 1000);
Mějte na paměti, že stavy fulfilled a rejected jsou neměnné: pokud promise přešel do jednoho z těchto stavů, už se nemůže přepnout do druhého. Podívejme se na příklad. V následujícím kódu se volání reject stane dříve, proto bude volání resolve ignorováno:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
Vytvořte promise, který bude úspěšně splněn po určité době. Vypište jej do konzole a prostudujte jeho počáteční stav a dokončený stav.
Vytvořte promise, který skončí neúspěchem po určité době. Vypište jej do konzole a prostudujte jeho počáteční stav a dokončený stav.