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:
let 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:
promise.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:
setTimeout(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:
let 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:
let 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:
let 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:
let 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:
let 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:
promise.then(function() {
// promise ayaktalganda işteyt
});
Promistin işi natıyası eger kaalasaq birinçi parametr retinde berilgen funktsiyagı tüşöt:
promise.then(function(result) {
console.log(result); // natıya menen massivdi çıgarat
});
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.