JavaScriptте Promisestı kirisiş

Siz bilgeniñizdey, asinxronduktu callback modelin koldonuü callback hell abalına aydooço jetilüüçö. Oşonduktan JavaScriptte promisester (promise) dep atalgan cañı model kirgizildi. Kelgile bul modeldi üyrönölü.

Promise bir ob'ekt bolup, aga parametr retinde içine bizdin asinxronduk kodubuzdu ornoduş kerek bolgon funktsiya berilet:

javascriptlet promise = new Promise(function() {
  // asinxronduk kod
});

Körünüp turganınday, men promise ob'ektin promise özgörüçüsünö jazdım. Kodduñ başka bir jerinde men bul özgörüçügö then metodun koldonup, içine bul promis jaratılganındagı asinxronduk kod ayaktalgan soñ atkarıluuçü kodu bar funktsiyanı berip alam:

javascriptpromise.then(function() {
  // asinxronduk kod ayaktalganda atkarılat
});

Tüşünüksüz bolup kalışı mümkün, oşonduktan misalga karabız. Mende tömöndögüdöy asinxronduk kod bar bolsun:

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

Katalık, men aga asinxronduktun negizgi maşelesin çıçam: timer iştegen soñ belli bir kodu atkaruu. Bul kodu timerdin özünün içine ornodbogonumdu jana bul kodo kandaydır bir çeçimde menin result özgörüçüsünö jazgan natıyamdın cetip kelüüsün kaalam. Çınında, bul maşeleni muurunku sabaktarda callbackter jana jazılmalar arqalı çıçkanbız. Kelgile endi bunu promisester arqalı kanday çıçuuçu körölü.

Başta bizdin asinxronduk kodubuzdu promiske orop koyuu kerek:

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

Birak, bul jetişüüçü emes. Biz asinxronduk kodubuzdun ayaktalganın aykın türdö körsötüübüz kerek. Bunda bizge eger berilse, avtomatik türdö funktsiyanın birinçi parametrine tüşüp kalüuçu ayaktatuu funktsiyası kömök bere alat:

javascriptlet promise = new Promise(function(resolve) { // parametrdi körsötöbüz
  setTimeout(function() {
    let result = [1, 2, 3, 4, 5];
  }, 3000);
});

Ayaktatuu funktsiyasının jardamı menen biz promisege asinxronduk kod ayaktalganın aykın türdö körsötö alabız. Bunun üçün biz bul funktsiyanı kaysı jerde çağırüübüz kerek bolso oşol jerde çağıruubuz kerek:

javascriptlet promise = new Promise(function(resolve) {
  setTimeout(function() {
    let result = [1, 2, 3, 4, 5];
    resolve(); // promisti ayaktatabız
  }, 3000);
});

Egerde biz asinxronduk koddun kandaydır bir natıyasın tışkarıga ötküzüünü kaalasak, biz anı ayaktatuu funktsiyasıbızgı parametr retinde berip koyso bolot:

javascriptlet promise = new Promise(function(resolve) {
  setTimeout(function() {
    let result = [1, 2, 3, 4, 5];
    resolve(result); // natıyanı ötköröbüz
  }, 3000);
});

Albet, ara özgörüçüdön kutuluuga bolot:

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

Endi kaalagan başka bir jerde biz promisibizdin then metodun çağıra albız:

javascriptpromise.then(function() {
  // promise ayaktalganda işteyt
});

Promistin işi natıyası eger kaalasaq birinçi parametr retinde berilgen funktsiyagı tüşöt:

javascriptpromise.then(function(result) {
  console.log(result); // natıya menen massivdi çıgarat
});
Задание 1

Içinde 5 sekund sozulçu bar, andan soñ promise atkarılıp, natıya retinde kandaydır bir tekstti kaytarış kerek bolgon promis jasañız. Bul tekstti ekranğa çıgarıñız.