⊗jsSpPrmInr 162 of 294 menu

Inleiding tot beloftes in JavaScript

Jy weet reeds dat die gebruik van die terugroepmodel van asynchroniciteit maklik tot 'n situasie van callback hell lei. Daarom is 'n nuwe model bekendgestel in JavaScript genaamd beloftes (promise). Kom ons bestudeer hierdie model.

'n Belofte verteenwoordig 'n voorwerp waarin 'n funksie as parameter oorgedra word, binne-in wat ons ons asinchrone kode moet plaas:

let promise = new Promise(function() { // asinchrone kode });

Soos jy kan sien, het ek die voorwerp met die belofte in die veranderlike promise geskryf. Op 'n ander plek in die kode kan ek op hierdie veranderlike die metode then toepas, deur daaraan 'n funksie oor te dra met die kode wat uitgevoer moet word na voltooiing van die asinchrone kode wat geskryf is tydens die skepping van hierdie belofte:

promise.then(function() { // sal uitvoer wanneer die asinchrone kode voltooi is });

Dit klink verwarrend, so kom ons kyk na 'n voorbeeld. Laat ek die volgende asinchrone kode hê:

setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000);

Laat ek vir dit ons hoof asinchrone taak wil oplos: om 'n sekere kode uit te voer nadat die tydsberekening afgeloop het. Terselfdertyd wil ek nie hierdie kode binne die tydsberekening self plaas nie en wil ek dat die resultaat, wat ek in die veranderlike result geskryf het, op een of ander manier in hierdie kode beland. In elk geval, ons het hierdie taak in vorige lesse opgelos deur terugroepe en inskrywings. Kom ons nou kyk hoe om dit met beloftes te doen.

Eerstens moet ons ons asinchrone kode in 'n belofte toedraai:

let promise = new Promise(function() { setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Dit is egter nie genoeg nie. Ons moet eksplisiet aandui dat ons asinchrone kode voltooi is. 'n Spesiale voltooiingsfunksie sal ons hierin help, outomaties wat in die eerste parameter van die funksie beland, as dit gespesifiseer is:

let promise = new Promise(function(resolve) { // spesifiseer parameter setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Met behulp van die voltooiingsfunksie kan ons eksplisiet aan die belofte aandui dat die asinchrone kode voltooi is. Om dit te doen, moet ons hierdie funksie in die gewenste plek oproep:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // voltooi die belofte }, 3000); });

Terselfdertyd, as ons 'n sekere resultaat van die asinchrone kode na buite wil oordra, kan ons dit as parameter aan ons voltooiingsfunksie oordra:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // dra resultaat oor }, 3000); });

Ons kan natuurlik ook van die tussentydse veranderlike ontslae raak:

let promise = new Promise(function(resolve) { setTimeout(function() { resolve([1, 2, 3, 4, 5]); }, 3000); });

Nou kan ons op enige ander plek die metode then van ons belofte oproep:

promise.then(function() { // sal aktiveer wanneer die belofte voltooi is });

Die resultaat van die belofte sal in die eerste parameter van die funksie beland, as ons dit wil spesifiseer:

promise.then(function(result) { console.log(result); // sal die array met die resultaat uitdruk });

Skep 'n belofte, binne-in wat 'n vertraging van 5 sekondes sal wees, waarna die belofte moet voltooi word, en as sy resultaat moet dit 'n sekere teks teruggee. Druk hierdie teks op die skerm uit.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp