{"id":16678,"date":"2025-01-25T22:51:24","date_gmt":"2025-01-25T19:21:24","guid":{"rendered":"https:\/\/www.itpiran.net\/blog\/?p=16678"},"modified":"2025-01-25T22:51:24","modified_gmt":"2025-01-25T19:21:24","slug":"understanding-the-event-loop-callbacks","status":"publish","type":"post","link":"https:\/\/www.itpiran.net\/blog\/tr\/tutorials\/understanding-the-event-loop-callbacks\/","title":{"rendered":"Olay d\u00f6ng\u00fcs\u00fcn\u00fc ve geri aramalar\u0131 anlama"},"content":{"rendered":"<h2 id=\"%d9%85%d9%82%d8%af%d9%85%d9%87\">girii\u015f<\/h2>\n<p>\u0130nternetin ilk zamanlar\u0131nda, web siteleri genellikle bir HTML sayfas\u0131ndaki statik verilerden olu\u015fuyordu. Ancak art\u0131k web uygulamalar\u0131 daha etkile\u015fimli ve dinamik hale geldi\u011finden, API verilerini almak i\u00e7in harici a\u011f istekleri gibi yo\u011fun i\u015flemler ger\u00e7ekle\u015ftirmek giderek daha gerekli hale geldi. Bu i\u015flemleri JavaScript&#039;te ger\u00e7ekle\u015ftirmek i\u00e7in bir geli\u015ftiricinin e\u015fzamans\u0131z programlama tekniklerini kullanmas\u0131 gerekir.<\/p>\n<p>JavaScript, i\u015flemleri birbiri ard\u0131na i\u015fleyen e\u015f zamanl\u0131 bir y\u00fcr\u00fctme modeline sahip tek i\u015f par\u00e7ac\u0131kl\u0131 bir programlama dili oldu\u011fundan, ayn\u0131 anda yaln\u0131zca bir komutu i\u015fleyebilir. Ancak, bir API&#039;den veri istemek gibi bir eylem, istenen verinin boyutuna, a\u011f ba\u011flant\u0131s\u0131n\u0131n h\u0131z\u0131na ve di\u011fer fakt\u00f6rlere ba\u011fl\u0131 olarak belirsiz bir s\u00fcre alabilir. API \u00e7a\u011fr\u0131lar\u0131 e\u015fzamanl\u0131 olarak yap\u0131lsayd\u0131, taray\u0131c\u0131, kayd\u0131rma veya bir d\u00fc\u011fmeye t\u0131klama gibi hi\u00e7bir kullan\u0131c\u0131 girdisini, bu i\u015flem tamamlanana kadar i\u015fleyemezdi. Bu, engelleme olarak bilinir.<\/p>\n<p>Engelleme davran\u0131\u015f\u0131n\u0131 \u00f6nlemek i\u00e7in, taray\u0131c\u0131 ortam\u0131nda JavaScript&#039;in eri\u015febilece\u011fi ve e\u015fzamans\u0131z olan bir\u00e7ok web API&#039;si bulunur; bu, s\u0131ral\u0131 olarak de\u011fil, di\u011fer i\u015flemlerle paralel olarak y\u00fcr\u00fct\u00fclebilecekleri anlam\u0131na gelir. Bu, e\u015fzamans\u0131z i\u015flem i\u015flenirken kullan\u0131c\u0131n\u0131n taray\u0131c\u0131y\u0131 normal \u015fekilde kullanmaya devam etmesini sa\u011flad\u0131\u011f\u0131 i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h2 id=\"%d8%ad%d9%84%d9%82%d9%87-%d8%b1%d9%88%db%8c%d8%af%d8%a7%d8%af\">Olay d\u00f6ng\u00fcs\u00fc<\/h2>\n<p>Bu b\u00f6l\u00fcm, JavaScript&#039;in olay d\u00f6ng\u00fcs\u00fcyle e\u015fzamans\u0131z kodu nas\u0131l i\u015fledi\u011fini a\u00e7\u0131kl\u0131yor. \u0130lk olarak, olay d\u00f6ng\u00fcs\u00fcn\u00fcn nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6steriyor ve ard\u0131ndan olay d\u00f6ng\u00fcs\u00fcn\u00fcn iki \u00f6\u011fesini a\u00e7\u0131kl\u0131yor: y\u0131\u011f\u0131n ve kuyruk.<\/p>\n<p>E\u015fzamanl\u0131 web API&#039;lerinden hi\u00e7birini kullanmayan JavaScript kodu, e\u015fzamanl\u0131 olarak, yani s\u0131rayla, teker teker y\u00fcr\u00fct\u00fcl\u00fcr. Bu, her biri konsola bir say\u0131 yazd\u0131ran \u00fc\u00e7 i\u015flevi \u00e7a\u011f\u0131ran \u015fu \u00f6rnek kodla g\u00f6sterilmi\u015ftir:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ Define three example functions\r\nfunction first() {\r\nconsole.log(1)\r\n}\r\n\r\nfunction second() {\r\nconsole.log(2)\r\n}\r\n\r\nfunction third() {\r\nconsole.log(3)\r\n}<\/code><\/pre>\n<\/div>\n<p>Bu kodda, console.log() kullanarak say\u0131lar\u0131 yazd\u0131ran \u00fc\u00e7 fonksiyon tan\u0131ml\u0131yorsunuz.<\/p>\n<p>Daha sonra fonksiyonlara yap\u0131lan \u00e7a\u011fr\u0131lar\u0131 yazal\u0131m:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ Execute the functions\r\nfirst()\r\nsecond()\r\nthird()<\/code><\/pre>\n<\/div>\n<p>\u00c7\u0131kt\u0131, fonksiyonlar\u0131n \u00e7a\u011fr\u0131lma s\u0131ras\u0131na g\u00f6re olacakt\u0131r: first(), second(), sonra three():<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>Output\r\n1\r\n2\r\n3<\/code><\/pre>\n<\/div>\n<p>E\u015fzamans\u0131z bir Web API kullan\u0131ld\u0131\u011f\u0131nda kurallar daha karma\u015f\u0131k hale gelir. Deneyebilece\u011finiz yerle\u015fik API&#039;lerden biri, bir zamanlay\u0131c\u0131 ayarlayan ve belirli bir s\u00fcre sonra bir eylem ger\u00e7ekle\u015ftiren setTimeout&#039;tur. setTimeout e\u015fzamans\u0131z olmal\u0131d\u0131r, aksi takdirde beklerken t\u00fcm taray\u0131c\u0131 donar ve bu da k\u00f6t\u00fc bir kullan\u0131c\u0131 deneyimine neden olur.<\/p>\n<p>Asenkron bir iste\u011fi sim\u00fcle etmek i\u00e7in ikinci fonksiyona setTimeout ekleyin:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ Define three example functions, but one of them contains asynchronous code\r\nfunction first() {\r\nconsole.log(1)\r\n}\r\n\r\nfunction second() {\r\nsetTimeout(() =&gt; {\r\nconsole.log(2)\r\n}, 0)\r\n}\r\n\r\nfunction third() {\r\nconsole.log(3)\r\n}<\/code><\/pre>\n<\/div>\n<p>setTimeout iki arg\u00fcman al\u0131r: e\u015fzamans\u0131z olarak \u00e7al\u0131\u015ft\u0131r\u0131lacak bir fonksiyon ve bu fonksiyonu \u00e7a\u011f\u0131rmadan \u00f6nce beklenecek s\u00fcre. Bu kodda, console.log dosyas\u0131n\u0131 anonim bir fonksiyona koyup setTimeout&#039;a aktar\u0131yorsunuz, ard\u0131ndan fonksiyonu 0 milisaniye sonra \u00e7al\u0131\u015ft\u0131r\u0131lacak \u015fekilde ayarl\u0131yorsunuz.<\/p>\n<p>\u015eimdi fonksiyonlar\u0131 daha \u00f6nce oldu\u011fu gibi \u00e7a\u011f\u0131ral\u0131m:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ Execute the functions\r\nfirst()\r\nsecond()\r\nthird()<\/code><\/pre>\n<\/div>\n<p>setTimeout&#039;u 0 olarak ayarlad\u0131\u011f\u0131n\u0131zda, bu \u00fc\u00e7 i\u015flevin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131n say\u0131lar\u0131 yine de s\u0131ral\u0131 olarak yazd\u0131raca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Ancak e\u015fzamans\u0131z oldu\u011fu i\u00e7in, i\u015flev sonuncusunda bir kesme ile yazd\u0131racakt\u0131r:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>Output\r\n1\r\n3\r\n2<\/code><\/pre>\n<\/div>\n<p>Zamanlay\u0131c\u0131y\u0131 s\u0131f\u0131r saniyeye mi yoksa be\u015f dakikaya m\u0131 ayarlad\u0131\u011f\u0131n\u0131z \u00f6nemli de\u011fil; e\u015fzamans\u0131z kod taraf\u0131ndan \u00e7a\u011fr\u0131lan console.log, en \u00fcst d\u00fczey e\u015fzamans\u0131z i\u015flevlerden sonra \u00e7al\u0131\u015facakt\u0131r. Bunun nedeni, JavaScript ana bilgisayar ortam\u0131n\u0131n (bu durumda taray\u0131c\u0131), e\u015fzamanl\u0131 veya paralel olaylar\u0131 i\u015flemek i\u00e7in olay d\u00f6ng\u00fcs\u00fc ad\u0131 verilen bir kavram kullanmas\u0131d\u0131r. JavaScript ayn\u0131 anda yaln\u0131zca bir komut \u00e7al\u0131\u015ft\u0131rabildi\u011finden, belirli bir komutun ne zaman y\u00fcr\u00fct\u00fcld\u00fc\u011f\u00fcn\u00fc bilmek i\u00e7in olay d\u00f6ng\u00fcs\u00fcne ihtiya\u00e7 duyar. Olay d\u00f6ng\u00fcs\u00fc bunu y\u0131\u011f\u0131nlar ve kuyruklar kavramlar\u0131yla i\u015fler.<\/p>\n<h5 id=\"%d9%be%d8%b4%d8%aa%d9%87\">Y\u0131\u011f\u0131n<\/h5>\n<p>Y\u0131\u011f\u0131n veya \u00e7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131, o anda y\u00fcr\u00fct\u00fclmekte olan fonksiyonun durumunu tutar. Y\u0131\u011f\u0131n kavram\u0131na a\u015fina de\u011filseniz, onu &quot;Son giren, ilk \u00e7\u0131kar&quot; (LIFO) \u00f6zelliklerine sahip bir dizi olarak d\u00fc\u015f\u00fcnebilirsiniz; bu, yaln\u0131zca y\u0131\u011f\u0131n\u0131n en alt\u0131ndaki \u00f6\u011feleri ekleyip \u00e7\u0131karabilece\u011finiz anlam\u0131na gelir. JavaScript, y\u0131\u011f\u0131ndaki ge\u00e7erli \u00e7er\u00e7eveyi (veya belirli bir ortamdaki fonksiyon \u00e7a\u011fr\u0131s\u0131n\u0131) y\u00fcr\u00fct\u00fcr, ard\u0131ndan onu kald\u0131r\u0131r ve bir sonraki \u00e7er\u00e7eveye ge\u00e7er.<\/p>\n<p>Yaln\u0131zca e\u015fzamanl\u0131 kod i\u00e7eren bir \u00f6rnek i\u00e7in taray\u0131c\u0131 a\u015fa\u011f\u0131daki s\u0131rayla \u00e7al\u0131\u015f\u0131r:<\/p>\n<ul>\n<li><strong>Birinci()<\/strong> Y\u0131\u011f\u0131na ekle, konsola 1 kaydeden first()&#039;i \u00e7al\u0131\u015ft\u0131r, y\u0131\u011f\u0131ndan first()&#039;i kald\u0131r.<\/li>\n<li><strong>ikinci()<\/strong> Y\u0131\u011f\u0131na ekle, konsola 2 yazd\u0131ran second()&#039;\u0131 \u00e7al\u0131\u015ft\u0131r, stack&#039;ten second()&#039;\u0131 kald\u0131r.<\/li>\n<li><strong>\u00fc\u00e7\u00fcnc\u00fc ()<\/strong> Y\u0131\u011f\u0131na ekle, konsola 3 kaydeden third()&#039;i \u00e7al\u0131\u015ft\u0131r, third()&#039;i y\u0131\u011f\u0131ndan kald\u0131r.<\/li>\n<\/ul>\n<p>setTimout ile ikinci \u00f6rnek \u015fu \u015fekildedir:<\/p>\n<ul>\n<li><strong>Birinci()<\/strong> Y\u0131\u011f\u0131na ekle, konsola 1 kaydeden first()&#039;i \u00e7al\u0131\u015ft\u0131r, y\u0131\u011f\u0131ndan first()&#039;i kald\u0131r.<\/li>\n<li><strong>ikinci()<\/strong> Y\u0131\u011f\u0131na ekle, second()&#039;\u0131 \u00e7al\u0131\u015ft\u0131r.\n<ul>\n<li>setTimeout()&#039;u y\u0131\u011f\u0131na ekleyin, zamanlay\u0131c\u0131y\u0131 ba\u015flatan ve anonim i\u015flevi kuyru\u011fa ekleyen Web API setTimeout()&#039;u \u00e7al\u0131\u015ft\u0131r\u0131n, setTimeout()&#039;u y\u0131\u011f\u0131ndan kald\u0131r\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>ikinci()<\/strong> Y\u0131\u011f\u0131ndan \u00e7\u0131kar\u0131n.<\/li>\n<li><strong>\u00dc\u00e7\u00fcnc\u00fc ()<\/strong> Y\u0131\u011f\u0131na ekle, konsola 3 kaydeden third()&#039;i \u00e7al\u0131\u015ft\u0131r, third()&#039;i y\u0131\u011f\u0131ndan kald\u0131r.<\/li>\n<li>Olay d\u00f6ng\u00fcs\u00fc, bekleyen mesajlar i\u00e7in kuyru\u011fu kontrol eder ve setTimeout()&#039;tan anonim i\u015flevi bulur, i\u015flevi 2&#039;yi konsola kaydeden y\u0131\u011f\u0131na ekler ve ard\u0131ndan y\u0131\u011f\u0131ndan kald\u0131r\u0131r.<\/li>\n<\/ul>\n<p>Asenkron bir Web API olan setTimeout&#039;u kullanarak, bu e\u011fitimde daha sonra ele al\u0131nacak olan kuyruk kavram\u0131n\u0131 tan\u0131t\u0131r.<\/p>\n<h5 id=\"%d8%b5%d9%81\">S\u0131ra<\/h5>\n<p>Kuyruk, ayn\u0131 zamanda mesaj kuyru\u011fu veya g\u00f6rev kuyru\u011fu olarak da adland\u0131r\u0131l\u0131r ve i\u015flevler i\u00e7in bir bekleme alan\u0131d\u0131r. \u00c7a\u011fr\u0131 y\u0131\u011f\u0131n\u0131 bo\u015f oldu\u011funda, olay d\u00f6ng\u00fcs\u00fc, en eski mesajdan ba\u015flayarak kuyrukta bekleyen herhangi bir mesaj olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Bir mesaj buldu\u011funda, onu y\u0131\u011f\u0131na ekler ve y\u0131\u011f\u0131n, mesajda bulunan i\u015flevi \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<p>setTimeout \u00f6rne\u011finde, zamanlay\u0131c\u0131 0 saniyeye ayarland\u0131\u011f\u0131 i\u00e7in anonim i\u015flev, \u00fcst d\u00fczey y\u00fcr\u00fctmenin geri kalan\u0131ndan hemen sonra y\u00fcr\u00fct\u00fcl\u00fcr. Zamanlay\u0131c\u0131n\u0131n, kodun tam olarak 0 saniyede veya belirli bir zamanda y\u00fcr\u00fct\u00fclece\u011fi anlam\u0131na gelmedi\u011fini, bunun yerine anonim i\u015flevi o s\u00fcre i\u00e7inde kuyru\u011fa ekleyece\u011fini unutmamak \u00f6nemlidir. Bu kuyruk sistemi, zamanlay\u0131c\u0131n\u0131n s\u00fcresi dolduktan sonra anonim i\u015flevi do\u011frudan y\u0131\u011f\u0131na eklemesi durumunda, o anda y\u00fcr\u00fct\u00fclmekte olan i\u015flevi kesintiye u\u011frataca\u011f\u0131 ve bunun da beklenmedik ve \u00f6ng\u00f6r\u00fclemeyen etkilere yol a\u00e7abilece\u011fi i\u00e7in mevcuttur.<\/p>\n<p><span style=\"color: #ff0000;\">Not: Promise&#039;leri i\u015fleyen i\u015f kuyru\u011fu veya mikrog\u00f6rev kuyru\u011fu ad\u0131 verilen ba\u015fka bir kuyruk daha vard\u0131r. Promise&#039;ler gibi mikrog\u00f6revler, setTimeout gibi makrog\u00f6revlerden daha y\u00fcksek \u00f6ncelikle y\u00fcr\u00fct\u00fcl\u00fcr.<\/span><\/p>\n<p><span style=\"color: #000000;\">Art\u0131k olay d\u00f6ng\u00fcs\u00fcn\u00fcn kod y\u00fcr\u00fctme s\u0131ras\u0131n\u0131 y\u00f6netmek i\u00e7in y\u0131\u011f\u0131n ve kuyru\u011fu nas\u0131l kulland\u0131\u011f\u0131n\u0131 bildi\u011finize g\u00f6re, bir sonraki ad\u0131m kodunuzdaki y\u00fcr\u00fctme s\u0131ras\u0131n\u0131 nas\u0131l kontrol edece\u011finizi bulmakt\u0131r. Bunu yapmak i\u00e7in, \u00f6nce olay d\u00f6ng\u00fcs\u00fcn\u00fcn e\u015fzamans\u0131z kodu do\u011fru \u015fekilde i\u015flemesini sa\u011flaman\u0131n temel yolunu, yani geri \u00e7a\u011f\u0131rma i\u015flevlerini \u00f6\u011freneceksiniz.<\/span><\/p>\n<h2 id=\"callback-functions\">Geri Arama Fonksiyonlar\u0131<\/h2>\n<p>setTimeout \u00f6rne\u011finde, zaman a\u015f\u0131m\u0131na u\u011frayan i\u015flev, \u00fcst d\u00fczey y\u00fcr\u00fctmenin ana ba\u011flam\u0131ndaki her \u015feyden sonra y\u00fcr\u00fct\u00fcl\u00fcr. Ancak, \u00fc\u00e7\u00fcnc\u00fc i\u015flev gibi i\u015flevlerden birinin zaman a\u015f\u0131m\u0131ndan sonra y\u00fcr\u00fct\u00fclmesini sa\u011flamak istiyorsan\u0131z, e\u015fzamans\u0131z kodlama tekniklerini kullanman\u0131z gerekir. Buradaki zaman a\u015f\u0131m\u0131, veri i\u00e7eren e\u015fzamans\u0131z bir API \u00e7a\u011fr\u0131s\u0131n\u0131 temsil edebilir. API \u00e7a\u011fr\u0131s\u0131ndan gelen verilerle \u00e7al\u0131\u015fmak istiyorsunuz, ancak \u00f6nce verilerin d\u00f6nd\u00fcr\u00fcld\u00fc\u011f\u00fcnden emin olman\u0131z gerekir.<\/p>\n<p>Bu sorunun temel \u00e7\u00f6z\u00fcm\u00fc geri \u00e7a\u011f\u0131rma fonksiyonlar\u0131n\u0131 kullanmakt\u0131r. Geri \u00e7a\u011f\u0131rma fonksiyonlar\u0131n\u0131n \u00f6zel bir s\u00f6zdizimi yoktur. Bunlar, ba\u015fka bir fonksiyona arg\u00fcman olarak aktar\u0131lan bir fonksiyondur. Ba\u015fka bir fonksiyonu arg\u00fcman olarak alan bir fonksiyona y\u00fcksek d\u00fczeyli fonksiyon denir. Bu tan\u0131ma g\u00f6re, herhangi bir fonksiyon arg\u00fcman olarak aktar\u0131ld\u0131\u011f\u0131nda \u00e7a\u011fr\u0131lan bir fonksiyon haline gelebilir. Telefon g\u00f6r\u00fc\u015fmeleri do\u011fas\u0131 gere\u011fi e\u015fzamans\u0131z de\u011fildir, ancak e\u015fzamans\u0131z ama\u00e7lar i\u00e7in kullan\u0131labilirler.<\/p>\n<p>\u0130\u015fte daha y\u00fcksek d\u00fczeyli bir fonksiyonun ve bir geri \u00e7a\u011f\u0131rman\u0131n s\u00f6zdizimi kod \u00f6rne\u011fi:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ A function\r\nfunction fn() {\r\nconsole.log('Just a function')\r\n}\r\n\r\n\/\/ A function that takes another function as an argument\r\nfunction higherOrderFunction(callback) {\r\n\/\/ When you call a function that is passed as an argument, it is referred to as a callback\r\ncallback()\r\n}\r\n\r\n\/\/ Passing a function\r\nhigherOrderFunction(fn)<\/code><\/pre>\n<\/div>\n<p>Bu kodda, fn fonksiyonunu tan\u0131ml\u0131yorsunuz, bir geri \u00e7a\u011f\u0131rma fonksiyonunu arg\u00fcman olarak alan aboveOrderFunction fonksiyonunu tan\u0131ml\u0131yorsunuz ve fn&#039;yi aboveOrderFunction&#039;a geri \u00e7a\u011f\u0131rma olarak ge\u00e7iriyorsunuz.<\/p>\n<p>Bu kodun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 a\u015fa\u011f\u0131daki sonu\u00e7lar\u0131 verecektir:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nJust a function<\/code><\/pre>\n<\/div>\n<p>setTimeout ile birinci, ikinci ve \u00fc\u00e7\u00fcnc\u00fc fonksiyonlara geri d\u00f6nelim. \u015eu ana kadar elde ettiklerimiz \u015funlar:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>function first() {\r\nconsole.log(1)\r\n}\r\n\r\nfunction second() {\r\nsetTimeout(() =&gt; {\r\nconsole.log(2)\r\n}, 0)\r\n}\r\n\r\nfunction third() {\r\nconsole.log(3)\r\n}<\/code><\/pre>\n<\/div>\n<p>G\u00f6rev, \u00fc\u00e7\u00fcnc\u00fc fonksiyonun, ikinci fonksiyondaki e\u015fzamans\u0131z eylem tamamlanana kadar y\u00fcr\u00fctmeyi her zaman geciktirmesini sa\u011flamakt\u0131r. Geri aramalar tam da bu noktada devreye girer. Birinci, ikinci ve \u00fc\u00e7\u00fcnc\u00fc fonksiyonlar\u0131 y\u00fcr\u00fctmenin en \u00fcst d\u00fczeyinde y\u00fcr\u00fctmek yerine, \u00fc\u00e7\u00fcnc\u00fc fonksiyonu ikinci fonksiyona arg\u00fcman olarak aktar\u0131rs\u0131n\u0131z. \u0130kinci fonksiyon, e\u015fzamans\u0131z eylem tamamland\u0131ktan sonra geri aramay\u0131 y\u00fcr\u00fct\u00fcr.<\/p>\n<p>Geri arama ile uygulanan \u00fc\u00e7 fonksiyon \u015funlard\u0131r:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ Define three functions\r\nfunction first() {\r\nconsole.log(1)\r\n}\r\n\r\nfunction second(callback) {\r\nsetTimeout(() =&gt; {\r\nconsole.log(2)\r\n\r\n\/\/ Execute the callback function\r\ncallback()\r\n}, 0)\r\n}\r\n\r\nfunction third() {\r\nconsole.log(3)\r\n}<\/code><\/pre>\n<\/div>\n<p>\u015eimdi birinci ve ikinciyi y\u00fcr\u00fct\u00fcn, ard\u0131ndan \u00fc\u00e7\u00fcnc\u00fcy\u00fc ikinciye arg\u00fcman olarak ge\u00e7irin:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>first()\r\nsecond(third)<\/code><\/pre>\n<\/div>\n<p>Bu kod blo\u011funu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki \u00e7\u0131kt\u0131y\u0131 alacaks\u0131n\u0131z:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n1\r\n2\r\n3<\/code><\/pre>\n<\/div>\n<p>\u0130lk olarak 1 yazd\u0131r\u0131l\u0131r ve zamanlay\u0131c\u0131 s\u00fcresi dolduktan sonra (bu durumda s\u0131f\u0131r saniyedir, ancak bunu herhangi bir de\u011fere de\u011fi\u015ftirebilirsiniz) 2 yazd\u0131r\u0131l\u0131r ve ard\u0131ndan 3. Asenkron Web API (setTimeout) tamamlanana kadar \u00e7al\u0131\u015f\u0131l\u0131r.<\/p>\n<p>Buradaki \u00f6nemli nokta, geri \u00e7a\u011f\u0131rma i\u015flevlerinin e\u015fzamans\u0131z olmamas\u0131d\u0131r. setTimeout, e\u015fzamans\u0131z g\u00f6revleri i\u015flemekten sorumlu e\u015fzamans\u0131z bir Web API&#039;sidir. Geri \u00e7a\u011f\u0131rmalar, yaln\u0131zca e\u015fzamans\u0131z bir g\u00f6rev tamamland\u0131\u011f\u0131nda bildirim alman\u0131z\u0131 ve bu g\u00f6revin ba\u015far\u0131s\u0131n\u0131 veya ba\u015far\u0131s\u0131zl\u0131\u011f\u0131n\u0131 y\u00f6netmenizi sa\u011flar.<\/p>\n<p>Art\u0131k geri aramalar\u0131 e\u015fzamans\u0131z g\u00f6revleri ger\u00e7ekle\u015ftirmek i\u00e7in nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendi\u011finize g\u00f6re, bir sonraki b\u00f6l\u00fcmde \u00e7ok fazla \u00e7a\u011fr\u0131y\u0131 i\u00e7 i\u00e7e ge\u00e7irmenin ve bir &quot;felaket piramidi&quot; olu\u015fturman\u0131n yol a\u00e7t\u0131\u011f\u0131 sorunlar a\u00e7\u0131klanmaktad\u0131r.<\/p>\n<h2 id=\"callback-%d8%aa%d9%88-%d8%af%d8%b1-%d8%aa%d9%88-%d9%88-%d9%87%d8%b1%d9%85-%d8%b9%d8%b0%d8%a7%d8%a8\">\u0130\u00e7 i\u00e7e ge\u00e7mi\u015f geri \u00e7a\u011f\u0131rma ve felaket piramidi<\/h2>\n<p>Geri \u00e7a\u011f\u0131rma fonksiyonlar\u0131, bir fonksiyonun ba\u015fka bir fonksiyon tamamlan\u0131p veriyle d\u00f6nene kadar gecikmesini sa\u011flaman\u0131n etkili bir yoludur. Ancak, geri \u00e7a\u011f\u0131rmalar\u0131n i\u00e7 i\u00e7e ge\u00e7mi\u015f yap\u0131s\u0131 nedeniyle, birbirine ba\u011fl\u0131 bir\u00e7ok ard\u0131\u015f\u0131k e\u015fzamans\u0131z iste\u011finiz varsa kod karma\u015f\u0131k hale gelebilir. Bu, ilk JavaScript geli\u015ftiricileri i\u00e7in b\u00fcy\u00fck bir hayal k\u0131r\u0131kl\u0131\u011f\u0131yd\u0131 ve sonu\u00e7 olarak, i\u00e7 i\u00e7e ge\u00e7mi\u015f \u00e7a\u011fr\u0131lar i\u00e7eren kod genellikle &quot;i\u015fkence piramidi&quot; veya &quot;geri \u00e7a\u011f\u0131rma cehennemi&quot; olarak an\u0131l\u0131r.<\/p>\n<p>\u0130\u015fte i\u00e7 i\u00e7e ge\u00e7mi\u015f geri aramalar\u0131n bir g\u00f6sterimi:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>function pyramidOfDoom() {\r\nsetTimeout(() =&gt; {\r\nconsole.log(1)\r\nsetTimeout(() =&gt; {\r\nconsole.log(2)\r\nsetTimeout(() =&gt; {\r\nconsole.log(3)\r\n}, 500)\r\n}, 2000)\r\n}, 1000)\r\n}<\/code><\/pre>\n<\/div>\n<p>Bu kodda, her yeni setTimeout, daha \u00fcst d\u00fczey bir fonksiyonun i\u00e7ine yerle\u015ftirilerek, giderek daha derin \u00e7a\u011fr\u0131lardan olu\u015fan bir piramit olu\u015fturulur. Bu kodu \u00e7al\u0131\u015ft\u0131rmak a\u015fa\u011f\u0131dakileri \u00fcretecektir:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n1\r\n2\r\n3<\/code><\/pre>\n<\/div>\n<p>Pratikte, ger\u00e7ek d\u00fcnyadaki e\u015fzamans\u0131z kodlarda bu \u00e7ok daha karma\u015f\u0131k hale gelebilir. Muhtemelen e\u015fzamans\u0131z koddaki hatalar\u0131 i\u015flemeniz ve ard\u0131ndan her yan\u0131ttan bir sonraki iste\u011fe veri aktarman\u0131z gerekecektir. Bunu geri aramalarla yapmak, kodunuzun okunmas\u0131n\u0131 ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131r\u0131r.<\/p>\n<p>\u0130\u015fte oynayabilece\u011finiz daha ger\u00e7ek\u00e7i bir &quot;k\u0131yamet piramidi&quot;nin uygulanabilir bir \u00f6rne\u011fi:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>\/\/ Example asynchronous function\r\nfunction asynchronousRequest(args, callback) {\r\n\/\/ Throw an error if no arguments are passed\r\nif (!args) {\r\nreturn callback(new Error('Whoa! Something went wrong.'))\r\n} else {\r\nreturn setTimeout(\r\n\/\/ Just adding in a random number so it seems like the contrived asynchronous function\r\n\/\/ returned different data\r\n() =&gt; callback(null, {body: args + ' ' + Math.floor(Math.random() * 10)}),\r\n500,\r\n)\r\n}\r\n}\r\n\/\/ Nested asynchronous requests\r\nfunction callbackHell() {\r\nasynchronousRequest('First', function first(error, response) {\r\nif (error) {\r\nconsole.log(error)\r\nreturn\r\n}\r\nconsole.log(response.body)\r\nasynchronousRequest('Second', function second(error, response) {\r\nif (error) {\r\nconsole.log(error)\r\nreturn\r\n}\r\nconsole.log(response.body)\r\nasynchronousRequest(null, function third(error, response) {\r\nif (error) {\r\nconsole.log(error)\r\nreturn\r\n}\r\nconsole.log(response.body)\r\n})\r\n})\r\n})\r\n}\r\n\/\/ Execute \r\ncallbackHell()<\/code><\/pre>\n<\/div>\n<p>Bu kodda, her bir fonksiyon i\u00e7in olas\u0131 bir yan\u0131t ve olas\u0131 bir hata hesaba katmal\u0131s\u0131n\u0131z, bu da callbackHell fonksiyonunu g\u00f6rsel olarak kafa kar\u0131\u015ft\u0131r\u0131c\u0131 hale getirir.<\/p>\n<p>Bu kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki sonucu elde edeceksiniz:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nFirst 9\r\nSecond 3\r\nError: Whoa! Something went wrong.\r\nat asynchronousRequest (&lt;anonymous&gt;:4:21)\r\nat second (&lt;anonymous&gt;:29:7)\r\nat &lt;anonymous&gt;:9:13<\/code><\/pre>\n<\/div>\n<h2 id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\">Sonu\u00e7<\/h2>\n<p>E\u015fzamans\u0131z kodu y\u00f6netmenin bu y\u00f6ntemi zordur. Bu nedenle, ES6&#039;da vaatler kavram\u0131 ortaya \u00e7\u0131km\u0131\u015ft\u0131r. Bir sonraki b\u00f6l\u00fcm\u00fcn odak noktas\u0131 budur.<\/p>","protected":false},"excerpt":{"rendered":"Giri\u015f \u0130nternetin ilk zamanlar\u0131nda, web siteleri genellikle HTML sayfalar\u0131ndaki statik verilerden olu\u015fuyordu\u2026","protected":false},"author":1,"featured_media":16684,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"\u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_focuskeywords":"[]","_yoast_wpseo_primary_category":"193","footnotes":""},"categories":[193,363],"tags":[384],"class_list":{"0":"post-16678","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tutorials","8":"category-programming","9":"tag-java-script"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks - \u0628\u0644\u0627\u06af ITPiran<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.itpiran.net\/blog\/tr\/tutorials\/understanding-the-event-loop-callbacks\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks - \u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"og:description\" content=\"\u0645\u0642\u062f\u0645\u0647 \u062f\u0631 \u0631\u0648\u0632\u0647\u0627\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u060c \u0648\u0628 \u0633\u0627\u06cc\u062a \u0647\u0627 \u0627\u063a\u0644\u0628 \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062b\u0627\u0628\u062a \u062f\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647 HTML \u062a\u0634\u06a9\u06cc\u0644&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.itpiran.net\/blog\/tr\/tutorials\/understanding-the-event-loop-callbacks\/\" \/>\n<meta property=\"og:site_name\" content=\"\u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-25T19:21:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.itpiran.net\/2025\/01\/25224954\/Callbacks-3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1793\" \/>\n\t<meta property=\"og:image:height\" content=\"1110\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\"},\"headline\":\"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks\",\"datePublished\":\"2025-01-25T19:21:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/\"},\"wordCount\":83,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2025\\\/01\\\/25224954\\\/Callbacks-3.jpg\",\"keywords\":[\"Java Script\"],\"articleSection\":[\"\u0622\u0645\u0648\u0632\u0634\u06cc\",\"\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/\",\"name\":\"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks - \u0628\u0644\u0627\u06af ITPiran\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2025\\\/01\\\/25224954\\\/Callbacks-3.jpg\",\"datePublished\":\"2025-01-25T19:21:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2025\\\/01\\\/25224954\\\/Callbacks-3.jpg\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2025\\\/01\\\/25224954\\\/Callbacks-3.jpg\",\"width\":1793,\"height\":1110},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/understanding-the-event-loop-callbacks\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0622\u0645\u0648\u0632\u0634\u06cc\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/category\\\/tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"name\":\"\u0628\u0644\u0627\u06af ITPiran\",\"description\":\"\u0627\u062e\u0628\u0627\u0631 \u0648 \u0645\u0642\u0627\u0644\u0627\u062a \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\",\"name\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"alternateName\":\"ITPIran Blog\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"width\":512,\"height\":512,\"caption\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\",\"name\":\"admin\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tr\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Olay D\u00f6ng\u00fcs\u00fcn\u00fc ve Geri Aramalar\u0131 Anlama - ITPiran Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.itpiran.net\/blog\/tr\/tutorials\/understanding-the-event-loop-callbacks\/","og_locale":"tr_TR","og_type":"article","og_title":"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks - \u0628\u0644\u0627\u06af ITPiran","og_description":"\u0645\u0642\u062f\u0645\u0647 \u062f\u0631 \u0631\u0648\u0632\u0647\u0627\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u060c \u0648\u0628 \u0633\u0627\u06cc\u062a \u0647\u0627 \u0627\u063a\u0644\u0628 \u0627\u0632 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062b\u0627\u0628\u062a \u062f\u0631 \u06cc\u06a9 \u0635\u0641\u062d\u0647 HTML \u062a\u0634\u06a9\u06cc\u0644&hellip;","og_url":"https:\/\/www.itpiran.net\/blog\/tr\/tutorials\/understanding-the-event-loop-callbacks\/","og_site_name":"\u0628\u0644\u0627\u06af ITPiran","article_published_time":"2025-01-25T19:21:24+00:00","og_image":[{"width":1793,"height":1110,"url":"https:\/\/cdn.itpiran.net\/2025\/01\/25224954\/Callbacks-3.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"admin","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#article","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/"},"author":{"name":"admin","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81"},"headline":"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks","datePublished":"2025-01-25T19:21:24+00:00","mainEntityOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/"},"wordCount":83,"commentCount":0,"publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2025\/01\/25224954\/Callbacks-3.jpg","keywords":["Java Script"],"articleSection":["\u0622\u0645\u0648\u0632\u0634\u06cc","\u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/","url":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/","name":"Olay D\u00f6ng\u00fcs\u00fcn\u00fc ve Geri Aramalar\u0131 Anlama - ITPiran Blog","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#primaryimage"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2025\/01\/25224954\/Callbacks-3.jpg","datePublished":"2025-01-25T19:21:24+00:00","breadcrumb":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#primaryimage","url":"https:\/\/cdn.itpiran.net\/2025\/01\/25224954\/Callbacks-3.jpg","contentUrl":"https:\/\/cdn.itpiran.net\/2025\/01\/25224954\/Callbacks-3.jpg","width":1793,"height":1110},{"@type":"BreadcrumbList","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/understanding-the-event-loop-callbacks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.itpiran.net\/blog\/"},{"@type":"ListItem","position":2,"name":"\u0622\u0645\u0648\u0632\u0634\u06cc","item":"https:\/\/www.itpiran.net\/blog\/category\/tutorials\/"},{"@type":"ListItem","position":3,"name":"\u062f\u0631\u06a9 \u062d\u0644\u0642\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f \u0648 callbacks"}]},{"@type":"WebSite","@id":"https:\/\/www.itpiran.net\/blog\/#website","url":"https:\/\/www.itpiran.net\/blog\/","name":"ITPiran Blog","description":"\u0130ran S\u00fcrd\u00fcr\u00fclebilir Ticaret Haberleri ve Makaleleri","publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.itpiran.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":"Organization","@id":"https:\/\/www.itpiran.net\/blog\/#organization","name":"S\u00fcrd\u00fcr\u00fclebilir \u0130ran \u0130\u015fletmeleri Blogu","alternateName":"ITPIran Blog","url":"https:\/\/www.itpiran.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","contentUrl":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","width":512,"height":512,"caption":"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81","name":"y\u00f6netici","url":"https:\/\/www.itpiran.net\/blog\/tr\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/posts\/16678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/comments?post=16678"}],"version-history":[{"count":2,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/posts\/16678\/revisions"}],"predecessor-version":[{"id":16685,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/posts\/16678\/revisions\/16685"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/media\/16684"}],"wp:attachment":[{"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/media?parent=16678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/categories?post=16678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/tr\/wp-json\/wp\/v2\/tags?post=16678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}