Promise-klassen i TypeScript
Denne artikkelen forklarer Promise-klassen i TypeScript.
YouTube Video
Promise
Promise
-klassen i TypeScript er i utgangspunktet den samme som Promise
i JavaScript. En Promise
er en innebygd klasse for å håndtere asynkrone operasjoner og representerer resultatet av en asynkron operasjon når den fullføres. Her forklarer vi grunnleggende bruk av Promises og relaterte konsepter.
Grunnleggende bruk
Opprette en Promise:
Et Promise
-objekt brukes til å kapsle inn asynkrone operasjoner. En Promise
opprettes med new Promise(executor)
, og den utfører asynkrone operasjoner inni seg. ‘executor’ tar to funksjoner, ‘resolve’ og ‘reject’, som argumenter.
1const myPromise = new Promise<number>((resolve, reject) => {
2 // Perform asynchronous operations
3 const success = true; // This is just an example
4 if (success) {
5 resolve(42); // In case of success
6 } else {
7 reject('Failed'); // In case of failure
8 }
9});
Bruke en Promise:
Den opprettede Promise
behandles ved hjelp av then()
og catch()
.
1myPromise.then((value) => {
2 console.log(`Success: ${value}`); // Process the value passed with resolve
3}).catch((error) => {
4 console.error(`Error: ${error}`); // Handle the error passed with reject
5});
finally()
-metoden
1const myPromise = new Promise<number>((resolve, reject) => {
2 // Perform asynchronous operations
3 const success = false; // This is just an example
4 if (success) {
5 resolve(42); // In case of success
6 } else {
7 reject('Failed'); // In case of failure
8 }
9});
10
11myPromise.then((value) => {
12 console.log(`Success: ${value}`); // Process the value passed with resolve
13}).catch((error) => {
14 console.error(`Error: ${error}`); // Handle the error passed with reject
15}).finally(() => {
16 console.log('The operation has completed');
17});
finally()
-metoden definerer kode som alltid vil bli kjørt uansett omPromise
blir oppfylt eller avslått.
Kjede Promises:
Ved å kjede then()
etter then()
kan du koble flere asynkrone operasjoner i serie.
1const myPromise = new Promise<number>((resolve, reject) => {
2 // Perform asynchronous operations
3 const success = true; // This is just an example
4 if (success) {
5 resolve(42); // In case of success
6 } else {
7 reject('Failed'); // In case of failure
8 }
9});
10
11myPromise
12 .then((value) => {
13 console.log(`Success: ${value}`);
14 return value + 1; // Pass the value to the next then
15 })
16 .then((newValue) => {
17 console.log(`New value: ${newValue}`);
18 })
19 .catch((error) => {
20 console.error(`Error: ${error}`);
21 });
async/await:
I TypeScript kan du håndtere Promises mer direkte ved hjelp av async
/await
. Innenfor en async
-funksjon kan du bruke nøkkelordet await
for å vente på resultatet av en Promise.
1const myPromise = new Promise<number>((resolve, reject) => {
2 // Perform asynchronous operations
3 const success = true; // This is just an example
4 if (success) {
5 resolve(42); // In case of success
6 } else {
7 reject('Failed'); // In case of failure
8 }
9});
10
11async function asyncFunction() {
12 try {
13 const value = await myPromise;
14 console.log(`Success: ${value}`);
15 } catch (error) {
16 console.error(`Error: ${error}`);
17 }
18}
19
20asyncFunction();
Promise-metoder
Promise.all()
Promise.all
utfører flere Promises samtidig og venter til alle er oppfylt.
1const promise1 = Promise.resolve(1);
2const promise2 = Promise.resolve(2);
3const promise3 = Promise.resolve(3);
4
5Promise.all([promise1, promise2, promise3])
6 .then((results) => {
7 console.log(results); // [1, 2, 3]
8 })
9 .catch((error) => {
10 console.error('Error :', error);
11 });
then()
blir kun kalt når allePromises
er oppfylt.catch()
blir kalt hvis én eller flere feiler.
Promise.race()
Promise.race
returnerer resultatet av den første Promise
som fullføres blant flere Promises.
1const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'First'));
2const promise2 = new Promise((resolve) => setTimeout(resolve, 500, 'Second'));
3
4Promise.race([promise1, promise2]).then((result) => {
5 console.log(result); // "First"
6});
- Som i dette eksempelet, returneres resultatet av den første
Promise
som fullføres.
Promise.allSettled()
Promise.allSettled
venter på at alle Promises er ferdige og returnerer et array med alle resultater, både oppfylte og avviste.
1const promise1 = Promise.resolve(1);
2const promise2 = Promise.reject("Failed");
3const promise3 = Promise.resolve(3);
4
5Promise.allSettled([promise1, promise2, promise3])
6 .then((results) => {
7 results.forEach(result => console.log(result));
8 // [
9 // { status: 'fulfilled', value: 1 },
10 // { status: 'rejected', reason: 'Failed' },
11 // { status: 'fulfilled', value: 3 }
12 // ]
13 });
then()
kalles når allePromises
er fullført (enten oppfylt eller avvist). Hver resultat inkluderer enstatus
-egenskap ('fulfilled'
eller'rejected'
). Feil påvirker ikke de andre operasjonene.
Promise.any()
Promise.any
venter til den første Promise er oppfylt og returnerer den.
1const promise1 = new Promise((resolve) => setTimeout(() => resolve("A ok"), 300));
2const promise2 = new Promise((_, reject) => setTimeout(() => reject("B fail"), 100));
3const promise3 = new Promise((resolve) => setTimeout(() => resolve("C ok"), 200));
4
5Promise.any([promise1, promise2, promise3])
6 .then(value => {
7 // Logs the first fulfilled value ("C ok")
8 console.log("first fulfilled:", value);
9 })
10 .catch(err => {
11 console.log("should not reach here in this example:", err);
12 });
- Den returnerer den første oppfylte verdien blant flere
Promises
.
Sammendrag
Ved å bruke TypeScript kan du spesifisere typene for Promises riktig, noe som lar deg skrive mer typesikre programmer. Dette hjelper med å fange opp feil tidlig under utviklingen ved å spesifisere typen verdi som en Promise returnerer på forhånd.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.