Stany promisa w JavaScript
Promis może znajdować się w jednym z trzech stanów. Podczas tworzenia promis jest w stanie oczekiwania (pending), a następnie może zostać spełniony (fulfilled), zwracając uzyskany wynik, lub odrzucony (rejected), zwracając przyczynę odrzucenia. Możesz obserwować przejście z jednego stanu do drugiego, uruchamiając następujący kod:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false; // ustaw albo true, albo false
if (!isError) {
resolve([1, 2, 3, 4, 5]);
} else {
reject('error in promise');
}
}, 3000);
});
setInterval(function() {
console.log(promise); // co sekundę wypisujemy promis w konsoli
}, 1000);
Należy pamiętać, że stany fulfilled i rejected są niezmienne: jeśli promis przeszedł do jednego z tych stanów, to nie będzie już mógł przejść do innego. Spójrzmy na przykład. W następnym kodzie wywołanie reject nastąpi wcześniej, więc wywołanie resolve zostanie zignorowane:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('error')), 1000);
setTimeout(() => resolve('ignored'), 2000);
});
Stwórz promis, który wykona się z sukcesem po pewnym czasie. Wypisz go w konsoli i zbadaj jego stan początkowy oraz stan po zakończeniu.
Stwórz promis, który wykona się niepowodzeniem po pewnym czasie. Wypisz go w konsoli i zbadaj jego stan początkowy oraz stan po zakończeniu.