Promises in sinchroniese styl in JavaScript
Om die probleem van promise hell op te los, is 'n spesiale sintaksis vir beloftes bedink, wat dit moontlik maak om asinchrone kode baie makliker te skryf - in 'n sinchroniese styl.
Kom ons begin met die bestudering daarvan. Laat ons eers die kode uit die vorige les neem:
function func() {
getSmth(2).then(res => {
console.log(res); // sal 4 uitvoer
});
}
func();
As ons funksie getSmth
sinchroon was, sou ons die kode van funksie func
soos volg kon herskryf:
function func() {
let res = getSmth(2);
console.log(res); // sal 4 uitvoer
}
Die funksie getSmth is egter asinchroon,
daarom sal die bogenoemde kode nie werk nie.
Maar deur van die sinchroniese styl van beloftes gebruik te maak,
kan ons iets soortgelyks kry. Laat ons dit doen.
Eerstens moet ons ons funksie
func as asinchroon verklaar met behulp van die spesiale
opdrag async:
async function func() {
}
Daarna sal ons binne die funksie func
die spesiale opdrag await kan gebruik.
Hierdie opdrag, geskryf voor 'n belofte, sal
JavaScript laat wag totdat die belofte
voltooi is. Daarna sal die opdrag die
resultaat van die belofte teruggee, en die uitvoering van die kode sal voortgaan.
In ons geval moet ons await
voor die oproep na getSmth skryf. Aangesien die resultaat
van die aanroep van hierdie funksie 'n belofte sal wees, sal verdere
uitvoering van die kode slegs voortgaan na
voltooiing van hierdie belofte. Wel, die resultaat
van die belofte kan in 'n veranderlike gestoor word. Laat ons
die beskryfde doen:
async function func() {
let res = await getSmth(2);
console.log(res); // sal 4 uitvoer
}
func();
Kom ons roep getSmth 'n paar keer:
async function func() {
let res1 = await getSmth(2);
let res2 = await getSmth(3);
console.log(res1 + res2); // sal 13 uitvoer
}
func();
En nou sal ons getSmth in 'n lus aanroep:
async function func() {
let arr = [1, 2, 3, 4, 5];
let sum = 0;
for (let elem of arr) {
sum += await getSmth(elem);
}
console.log(sum);
}
func();
Herskryf die volgende kode deur die sinchroniese sintaksis te gebruik:
function func() {
getSmth(2).then(res1 => {
getSmth(3).then(res2 => {
getSmth(4).then(res3 => {
console.log(res1 + res2 + res3);
});
});
});
}
func();