Helion Bestsellery

Cyberbezpieczeństwo w małych sieciach. Praktyczny przewodnik dla umiarkowanych paranoików
  • Autor: Seth Enoka
  • Zniżka: 35%
  • Cena: 67.00 43.55 zł
  • Marka: Helion
  • Status: Dostępna
  • Typ: Książka
  • EAN: 9788328904286
  • ISBN: 978-83-289-0428-6
Dodaj Cyberbezpieczeństwo w małych sieciach. Praktyczny przewodnik dla umiarkowanych paranoików do koszyka

Helion Książka Dnia

Algorytmy w Pythonie. Techniki programowania dla praktyków
  • Autor: Piotr Wróblewski
  • Zniżka: 50%
  • Cena: 119.00 59.50 zł
  • Marka: Helion
  • Status: Dostępna
  • Typ: Książka
  • EAN: 9788328393684
  • ISBN: 978-83-283-9368-4
Dodaj Algorytmy w Pythonie. Techniki programowania dla praktyków do koszyka

Promise.then()

[ Leksykon ] [ JavaScript ] [ Metody ] [ Promise() ]

Promise.then()

[_] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]

then(onFulfilled)
then(onFulfilled, onRejected)

  

Przykłady:

const dane = new Promise((resolve, reject) => {
resolve('Tak!');
});

dane.then((value) => {
console.log(value); // "Tak!"
});

  

function resolved(result) {
console.log(result);
}

function rejected(result) {
console.error(result);
}

Promise.reject(new Error('Błąd!')).then(resolved, rejected);
Promise.resolve("OK!").then(resolved, rejected);
// Error: Błąd!
// "OK!"

 

const dane = Promise.resolve([5, 10, 15]);
dane.then((value) => {
console.log(value[1]); // 10
});

 

const zadanie = {
then(resolvedA, rejectedA) {
resolvedA({
then(resolvedB, rejectedB) {
resolvedB(5*2);
},
});
},
};

Promise.resolve(zadanie).then((value) => {
console.log(value); // 10
});

 

const WYBRANY_NR = 5;

// funkcja jest promise zwraca resolve, reject
function pracaA(resolve, reject) {
// wykonaj prace co 5
setTimeout(() => {
const czas = Date.now();
const reszta = czas % 10;
console.log(czas);
console.log(reszta);

if (reszta == WYBRANY_NR) {
resolve(reszta);
}
else if (reszta < WYBRANY_NR) {
reject(`Wybrana liczba jest za duża: ${reszta}`);
}
else if (reszta > WYBRANY_NR) {
resolve(reszta);
} else {
reject(`Błąd: NR: $(WYBRANY_NR), RESZTA: ${reszta}`);
}

//zadanieB();

}, 5000);
}

// sprawdzamy czy liczba jest parzysta
function pracaB1(reszta) {
const parzystaNR = reszta % 2 === 1;
console.log(`B1: ${reszta}`);
console.log(`B1: ${parzystaNR}`);
return { reszta, parzystaNR };
}

function pracaB2(przyczyna) {
const err = new Error(`Opis błędu, przyczyna: ${przyczyna}`, {komunikat: przyczyna} );
console.error(err);
throw err; // zostanie zatrzymane skok do pierwszego catch bloku
}

function pracaC(dane) { // { reszta, parzysta }

console.log(`C: ${dane.reszta}`);
console.log(`C: ${dane.parzystaNR}`);

return new Promise((resolve, reject) => {
const { reszta, parzystaNR } = dane;
if (reszta == WYBRANY_NR - 1) {
dane.tekst = parzystaNR ? "nieparzysta" : "parzysta";
resolve(dane); // { reszta, parzysta, tekst }
}
else if (reszta > WYBRANY_NR) {
dane.tekst = parzystaNR ? "nieparzysta" : "parzysta";
console.log(`Dane: reszta: ${dane.reszta} nie równa liczbie ${WYBRANY_NR}, reszta jest to liczba: ${dane.tekst}`);
reject(`Wybrana liczba jest za mała: ${reszta}, reszta: ${dane.tekst}`);
} else {
dane.tekst = parzystaNR ? "nieparzysta" : "parzysta";
resolve(dane);
}
});
}

function zadanieB() {

new Promise(pracaA)
.then(pracaB1, pracaB2)
.then(pracaC)
.then((dane) => { //
console.log(`Dane: reszta: ${dane.reszta} równa liczbie ${WYBRANY_NR} jest to liczba: ${dane.tekst}`);
return dane;
})
.catch((przyczyna) => {
if (przyczyna.komunikat) {
console.error("Opis błędu podany wcześniej!");
} else {
console.error(`Problem z pracaC(): ${przyczyna}`);
}
})
.finally((dane) => console.log("KONIEC!"));

}

zadanieB();

 

zadanie()
.then((url) => fetch(url))
.then((res) => res.json())
.then((data) => {
pracaA.push(data);
})
.then(() => {
console.log(pracaA);
});

 

const mojaPromise = new Promise((resolve, reject) => {
console.log("StartN"); // StartN
resolve("StartM");
})

mojaPromise.then((value) => {
console.log(value); // StartM
throw new Error("StopN!");
})
.catch((e) => {
console.error(e.message); // StopN!
})
.then(() => {
console.log("Zadanie AAA"); // Zadanie AAA
});

 

Promise.resolve("A")
.then(
(txt) =>
new Promise((resolve, reject) => {
setTimeout(() => {
txt += "B";
resolve(txt);
}, 1);
}),
)
.then((txt) => {
setTimeout(() => {
txt += "C";
console.log(txt); // "ABC"
}, 1);
return txt;
})
.then((txt) => {
console.log( // "D"
"D",
);
console.log(txt); // "AB"
});

   

Opis:
Metoda Promise.then() instancji Promise przyjmuje maksymalnie dwa argumenty: funkcje wywołania zwrotnego dla spełnionych i odrzuconych przypadków Promise. Natychmiast zwraca równoważny Promise obiekt, umożliwiając łączenie wywołań z innymi metodami obietnicy. Parametry onFulfilled - funkcja do asynchronicznego wykonania, gdy ta obietnica zostanie spełniona. Jego zwracana wartość staje się wartością spełnienia obietnicy zwróconej przez then(). Funkcja wywoływana jest z następującymi argumentami: value - wartość, z jaką obietnica została spełniona. Jeśli nie jest to funkcja, jest ona wewnętrznie zastępowana funkcją tożsamości (x) => x, która po prostu przekazuje dalej wartość spełnienia. onRejected - opcjonalny, funkcja do asynchronicznego wykonania, gdy ta obietnica zostanie odrzucona. Jego zwracana wartość staje się wartością spełnienia obietnicy zwróconej przez then(). Funkcja wywoływana jest z następującymi argumentami: reason - wartość, z jaką obietnica została odrzucona. Jeśli nie jest to funkcja, jest ona wewnętrznie zastępowana funkcją rzucającą (x) => { throw x; }, która zgłasza otrzymaną przyczynę odrzucenia. Wartość zwracana Promise natychmiast zwraca nowy. Ta nowa obietnica jest zawsze oczekująca po zwróceniu, niezależnie od statusu bieżącej obietnicy. Jedna z procedur obsługi onFulfilled i onRejected zostanie wykonana w celu obsługi spełnienia lub odrzucenia bieżącej obietnicy. Wywołanie zawsze odbywa się asynchronicznie, nawet jeśli bieżąca obietnica jest już rozliczona. Zachowanie zwróconej obietnicy zależy od wyniku wykonania procedury obsługi, zgodnie z określonym zestawem reguł. Jeśli funkcja obsługi:

zwraca wartość: zostaje spełniony ze zwróconą wartością jako wartość.
nic nie zwraca: zostaje spełniony undefined jako wartość.
zgłasza błąd: zostaje odrzucony z zgłoszonym błędem jako wartoścć.
zwraca już spełnioną obietnicę: zostaje spełniona z wartością tej obietnicy jako jej wartość.
zwraca już odrzuconą obietnicę: zostaje odrzucona z wartością tej obietnicy jako wartość.
zwraca kolejną oczekującą obietnicę: oczekuje i zostaje spełniona/odrzucona z wartością tej obietnicy jako jej wartość natychmiast po spełnieniu/odrzuceniu tej obietnicy.

Metoda then() planuje funkcje wywołania zwrotnego w celu ostatecznego zakończenia Obietnicy spełnienia lub odrzucenia. Jest to prymitywna metoda obietnic, protokół thenable oczekuje, że wszystkie obiekty podobne do obietnic ujawnią then() metodę, a obie metody catch() i finally() działają poprzez wywołanie metody obiektu then(). Aby uzyskać więcej informacji na temat onRejected modułu obsługi, zobacz catch() odnośnik. then() zwraca nowy obiekt obietnicy. Jeśli wywołasz tę then() metodę dwukrotnie na tym samym obiekcie obietnicy zamiast łączenia łańcuchowego, wówczas ten obiekt obietnicy będzie miał dwie pary procedur obsługi rozliczeń. Wszystkie procedury obsługi dołączone do tego samego obiektu obietnicy są zawsze wywoływane w kolejności, w jakiej zostały dodane. Co więcej, obie obietnice zwracane przez każde wywołanie then() startu oddzielają łańcuchy i nie czekają na wzajemne rozliczenie. Obiekty następnie możliwe, które pojawiają się w then() łańcuchu, są zawsze rozwiązywane onFulfille dobsługa nigdy nie otrzymuje obiektu, który może następnie zostać zwrócony przez którąkolwiek z procedur obsługi, są zawsze rozpatrywane przed przekazaniem do następnego programu obsługi. Dzieje się tak dlatego, że przy konstruowaniu nowej promesy funkcje resolvei reject przekazane przez nią executor są zapisywane, a gdy bieżąca obietnica zostanie rozstrzygnięta, zostanie wywołana odpowiednia funkcja z wartością spełnienia lub powodem odrzucenia. Logika rozstrzygająca pochodzi z resolve funkcji przekazanej przez Promise() konstruktora. then() obsługuje podklasy, co oznacza, że ​​można je wywołać na instancjach podklas Promise, a wynikiem będzie obietnica typu podklasy. Za pomocą tej właściwości możesz dostosować typ wartości zwracanej @@species.

Linki:

 

 

 

 

 

Please publish modules in offcanvas position.