[ Leksykon ] [ JavaScript ] [ Operatory ]
Operator await
[_] [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]
Przykłady:
const promiseA = new Promise((resolve) => setTimeout(() => resolve("zadanie A"), 1000));
const promiseB = new Promise((resolve) => setTimeout(() => resolve("zadanie B"), 5000));
const promiseC = new Promise((resolve, reject) => setTimeout(() => reject("zadanie C"), 1000));
const promiseD = new Promise((resolve, reject) => setTimeout(() => reject("zadanie D"), 5000));
function zadanie(zad) {
const stat = { status: "pending" };
return Promise.race([zad, stat]).then(
(value) => value === stat ? value : { status: "fulfilled", value },
(reason) => ({ status: "rejected", reason })
);
}
async function zadania() {
console.log(await zadanie(promiseA));
console.log(await zadanie(promiseB));
console.log(await zadanie(promiseC));
console.log(await zadanie(promiseD));
}
zadania();
setTimeout(() => {
console.log("Wykonane zadania po dwóch sekundach");
zadania();
}, 2000);
// { status: 'pending' }
// { status: 'pending' }
// { status: 'pending' }
// { status: 'pending' }
// Wykonane zadania po dwóch sekundach
// { status: 'fulfilled', value: zadanie A }
// { status: 'pending' }
// { status: 'rejected', reason: zadanie C }
// { status: 'pending' }
async function pobieranie(plik, nazwa) {
const test = await fetch(plik);
if (!test.ok) {
throw new Error("plik nie istnieje, status: ${response.status}");
}
const blobinfo = await response.blob();
return [blobinfo, nazwa];
}
const fotoA = pobieranie("fotoa.jpg", "fotoA");
const fotoB = pobieranie("fotob.jpg", "fotoB");
const fotoC = pobieranie("fotoc.jpg", "fotoC");
Promise.any([fotoA, fotoB, fotoC]).then(([blob1, nazwa]) => {
const objPlikuURL = URL.createObjectURL(blob1);
const image = document.createElement("img");
image.src = objPlikuURL;
image.alt = nazwa;
document.body.appendChild(image);
}).catch((e) => {
console.error(e);
});
function zadanieB(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 5000);
});
}
async function zadanieA() {
const x = await zadanieB(60);
console.log(x); // po oczekiwaniu 5 sekundach await przekarze do console.log 60
}
zadanieA();
const dane = fetch("dane.json").then((response) => response.json());
export default await dane;
async function zadanie(name) {
console.log(name, "1");
await console.log(name, "2"); // dodatkowe taktowanie
console.log(name, "3");
}
zadanie("krok");
zadanie("skok");
// dodatkowe taktowanie krok 1, krok 2, skok 1, skok 2, krok 3, skok 3
async function zadanieWA() {
await null;
throw new Error("NIE");
}
async function zadanieA() {
return await zadanieWA();
// await rozpakowujeie zadanieWA do zadanieA Error
// natepmnie pakuje i zwraca zadanieA Error
}
zadanieA();
// Error: NIE
// zadanieWA
// async zadanieA
async function zadanieA() {
const zadanie = {
then(resolve, reject) {
resolve("TAK");
},
};
console.log(await zadanie); // "TAK"
}
async function zadanieA() {
const zadanie = {
then(resolve, reject) {
reject(new Error("NIE"));
},
};
console.log(await zadanie); // "NIE"
}
zadanieA();
zadanieB();
Opis:
Operator await służy do czekania na Promise i uzyskania jego wartości spełnienia. Używanie await wstrzymuje wykonywanie otaczającej go async(), dopóki obietnica nie zostanie spełniona lub odrzucona. Kiedy wykonanie zostaje wznowione, wartość await wyrażenia staje się wartością spełnionej obietnicy. Jeśli obietnica zostanie odrzucona, await wyrażenie zgłosi odrzuconą wartość. Można go używać tylko wewnątrz funkcji asynchronicznej lub na najwyższym poziomie modułu. Składnia await expression to możliwy do wykonania obiekt lub dowolna wartość, na którą należy czekać. Zwraca wartość spełnionej obietnicy lub obiektu lub wartość wyrażenia. Zgłasza przyczynę odrzucenia. Funkcja zawierająca await wyrażenie pojawi się w śladzie stosu error. W przeciwnym razie, jeśli odrzucona obietnica nie będzie oczekiwana lub zostanie natychmiast zwrócona, funkcja wywołująca nie pojawi się w śledzeniu stosu.
O.
Zobacz też:
[ Promise ] - jest obiektem reprezentującym ostateczne zakończenie lub niepowodzenie operacji asynchronicznej
Linki: