Promise Race

N számú dolgot érhet el, ha tudja, hogyan kell használni az Ígéreteket a JavaScriptben. Vannak bizonyos módok arra, hogy egy függvény ígéretet tegyen bizonyos kulcsszavak hozzáadásával és használatával, amelyek általában tartalmazzák a async-await kifejezést, vagy bármely olyan metódust, amely az Promise osztály egy példányát adja vissza.

Lehet, hogy nagyon jól ismeri a Promise.all és Promise.allSettled kifejezéseket, de valószínűleg nem sokat használ Promise.race, ezért ma egy jó használati esetre fogok összpontosítani, ahol használhatja a Promise.race-et.

Mi az a Promise verseny?

Az ígéretverseny egy speciális típusú metódus, amely metódusok tömbjét veszi be bemenetként, és olyan ígéretet ad vissza, amely egy olyan metódus kimenetét oldotta meg, amely csak először tér vissza.

A Promise.all-tól eltérően nem egy kimeneti tömböt ad vissza, hanem egyetlen értéket ad vissza, amely azt adja vissza, ami először működik

Például:

Ha ezt a programot futtatnám, az eredmény a következő lenne:

[ 'one', 'two', 'three' ]

És ha Promise.all-ről Promise.race-ra váltok, akkor a kimenet a következő lenne:

'three'

Ennek az az oka, hogy a three-nek van a legkevesebb ideje futni. Ha összehasonlítja őket más ígéretekkel. Általánosságban elmondható, hogy a Promise.race az első ígéret eredményét veszi át, amelyet a végrehajtás ideje alapján oldanak meg

Ígérd meg az időtúllépést

nincs beépített módszer az időtúllépéshez, ezért a megoldást a Promise.race használatával hozzuk létre.

Hogyan lehet időtúllépni egy módszert egy idő után?

Vegyünk egy jó példát a Promise.race-re. Ennek felépítéséhez tegyük fel, hogy szeretnénk létrehozni egy olyan metódust, amely bizonyos idő elteltével öntúllépést jelent. Ennek a használati esetnek a kezelésére használhatjuk a Promise.race -t. Lássuk hogyan

Nézzük ezt a módszert,

itt van egy promiseThatWillTakeMoreTime nevű szokásos metódusunk, amelynek végrehajtási ideje 1000 ms, és ellene van még egy metódus, amely időtúllépési értéket vesz fel, és a kérés elutasított értékét adja vissza a rejectSleep nevű idő elérése után.

Ez zökkenőmentesen fog működni! 1000-nél nagyobb időtúllépés esetén az eredmény a következő lesz

output - this is a heavy function which return promise

és 1000-nél kevesebb időtúllépés esetén az eredmény hiba lenne, mint

Error: Request timed out

Nagy! de tudunk-e ehhez jó megjelenésű megközelítést alkotni? Igen

Hozzon létre egy prototípus módszert az ígérethez

megtartjuk a rejectSleep módszert úgy, ahogy van, de hozzáadunk egy új prototípust a Promise-hoz, hogy minden körben felhasználhassuk, pl.

Nagyszerű munka! most van egy új ígéretmódszerünk, amely ugyanazt a kimenetet adja vissza, mint fent, és bármilyen függvényt létrehozhat egyéni időtúllépéssel

Létrehozhat olyan metódust is, amely visszaadja a Promise.race példányt, de én azt szeretném, ha prototípus szinten lenne

Következtetés

Sokféleképpen hozhat létre módszert és prototípust, amelyek ugyanazt a kimenetet szolgálják. Kiválaszthatja azt, ami a legmegfelelőbb az Ön számára

Remélem, hogy ez a cikk segíteni fog Önnek abban, hogy még néhány jó felhasználási esetet megtudjon erről, és ezt meg is valósítsa. Köszönöm, hogy elolvasta.

Alkatrész-vezérelt építés. Jobb, gyorsabb és skálázhatóbb.

Felejtsd el a monolitikus alkalmazásokat, kezdj el összetevő-vezérelt szoftvereket építeni. Hozzon létre jobb szoftvereket független összetevőkből, és állítsa össze őket végtelen funkciókká és alkalmazásokká.

Az olyan OSS-eszközök, mint a Bit, nagyszerű fejlesztői élményt kínálnak az összetevő-vezérelt építéshez. Kezdje kicsiben és skálázza sok alkalmazással, tervezőrendszerrel vagy akár Micro Frontendekkel. Próbálja ki →

Tudj meg többet