Python və R ilə işləyən data scientistlər tez-tez JavaScript'də asinxronluq anlayışı ilə qarşılaşanda çaşqınlıq yaşayır. Bir proqramçı, öz təcrübəsini bölüşərək, Promise və resolve() funksiyalarının məntiqini başa salmaq üçün maraqlı bir analoji təqdim edir.
Bloklama vs asinxron gözləmə
Müəllif Python-dakı time.sleep() və ya Selenium'un WebDriverWait metoduna öyrəşib. Bu metodlar proqramın icrasını tamamilə dayandırır – heç bir kod işləmir, gözləmə bitənə qədər bloklanır. Lakin JavaScript-dəki setTimeout və Promise fərqli işləyir: gözləmə zamanı proqramın qalan hissəsi işləməyə davam edir.
Məsələn, aşağıdakı kod parçasına baxaq:
async function main() { console.log("Fetching..."); const fetchedPosts = await new Promise((resolve) => { setTimeout(() => resolve([{ id: 1, content: "Post 1" }]), 2000); }); console.log("Fetched posts:", fetchedPosts); console.log("Sync code ran"); } main();Çıxış belə olacaq:
- Fetching...
- Sync code ran
- Fetched posts: [...]
Yəni, Sync code ran ifadəsi Fetched posts-dən əvvəl yazılır. Bunun səbəbi await ilə gözləmə zamanı qalan sinxron kodun icrasının dayandırılmamasıdır. Əgər Python-dakı bloklama metodu olsaydı, sətir-sətir icra olunar və nəticə fərqli olardı.
Data Scientistlər üçün nə faydası var?
Bu anlayış xüsusilə məlumat qatı (data layer) qurarkən vacibdir. Müəllif fitnes sosial tətbiqində istifadəçilərin yeni postları yükləməsini simulyasiya edən bir funksiya yazıb. Real şəbəkə sorğusunu təqlid etmək üçün gecikmə əlavə edib. Asinxron məntiqi başa düşməsəydi, kod səhv işləyəcəkdi.
Python'dan gələnlər üçün əsas fərq: await yalnız həmin funksiyanı gözlədir, lakin qalan proqramı bloklamır. Bu, JavaScript'in hadisə döngüsü (event loop) sayəsində mümkündür. Data scientistlər üçün bu, API sorğuları, paralel verilənlər emalı və real-vaxt tətbiqlərində faydalıdır.
Yekun olaraq, müəllif vurğulayır ki, JavaScript'də asinxron proqramlaşdırma əvvəlcə çaşdırıcı görünsə də, düzgün analogiyalarla öyrənmək mümkündür. Əgər Python-dakı bloklama ilə müqayisə etsəniz, fərqi asanlıqla görə bilərsiniz.
Mənbə: Dev.to (https://dev.to/j1wonkim/data-scientist-learning-js-promises-and-resolve-p9l)


