{"id":34275,"date":"2025-11-14T05:40:43","date_gmt":"2025-11-14T02:40:43","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34275"},"modified":"2025-11-14T05:40:43","modified_gmt":"2025-11-14T02:40:43","slug":"javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/","title":{"rendered":"JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc"},"content":{"rendered":"<p><body><\/p>\n<h2>JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc<\/h2>\n<p>JavaScript, do\u011fas\u0131 gere\u011fi tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) bir dildir. Bu, bir anda yaln\u0131zca bir g\u00f6revi yerine getirebilece\u011fi anlam\u0131na gelir. Ancak web uygulamalar\u0131 genellikle a\u011f istekleri yapma, dosya okuma\/yazma, zamanlay\u0131c\u0131lar kullanma gibi uzun s\u00fcreli ve zaman al\u0131c\u0131 i\u015flemleri i\u00e7erir. Bu t\u00fcr i\u015flemler senkronize bir \u015fekilde y\u00fcr\u00fct\u00fcld\u00fc\u011f\u00fcnde, ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke eder ve kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn donmas\u0131na, uygulaman\u0131n yan\u0131t veremez hale gelmesine neden olur. \u0130\u015fte bu noktada asenkron programlama devreye girer.<\/p>\n<p>ES6 (ECMAScript 2015) ile birlikte JavaScript&#8217;e eklenen Promise&#8217;lar, asenkron i\u015flemleri y\u00f6netmek i\u00e7in modern, g\u00fc\u00e7l\u00fc ve daha okunabilir bir y\u00f6ntem sunar. Promise&#8217;lar, gelecekte tamamlanacak veya ba\u015far\u0131s\u0131z olacak bir i\u015flemin nihai sonucunu temsil eden bir nesnedir. Geleneksel callback tabanl\u0131 yakla\u015f\u0131mlar\u0131n (callback hell olarak bilinen i\u00e7 i\u00e7e callback&#8217;ler) neden oldu\u011fu karma\u015f\u0131kl\u0131\u011f\u0131 gidererek, daha d\u00fczenli ve y\u00f6netilebilir bir kod yap\u0131s\u0131 sa\u011flar.<\/p>\n<h3>Asenkron Programlaman\u0131n Temelleri ve \u0130htiya\u00e7 Duyulan \u00c7\u00f6z\u00fcmler<\/h3>\n<p>JavaScript&#8217;in tek i\u015f par\u00e7ac\u0131kl\u0131 yap\u0131s\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, uzun s\u00fcren i\u015flemlerin ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke etmeden \u00e7al\u0131\u015fabilmesi kritik \u00f6neme sahiptir. Geleneksel olarak bu, callback fonksiyonlar\u0131 arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131yordu. Bir i\u015flem tamamland\u0131\u011f\u0131nda veya bir hata olu\u015ftu\u011funda \u00e7al\u0131\u015ft\u0131r\u0131lacak bir fonksiyonu ba\u015fka bir fonksiyona parametre olarak ge\u00e7mek, asenkronlu\u011fun temelini olu\u015fturuyordu.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Callback Hell \u00d6rne\u011fi (Geleneksel Yakla\u015f\u0131m)\nveriAl(function(veri) {\n  veriyiIsle(veri, function(islenmisVeri) {\n    veriyiKaydet(islenmisVeri, function(sonuc) {\n      console.log('\u0130\u015flem tamamland\u0131:', sonuc);\n    }, function(hata) {\n      console.error('Kaydetme hatas\u0131:', hata);\n    });\n  }, function(hata) {\n    console.error('\u0130\u015fleme hatas\u0131:', hata);\n  });\n}, function(hata) {\n  console.error('Veri alma hatas\u0131:', hata);\n});<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi, i\u00e7 i\u00e7e ge\u00e7mi\u015f callback&#8217;ler kodu okumay\u0131, hata ay\u0131klamay\u0131 ve s\u00fcrd\u00fcrmeyi zorla\u015ft\u0131r\u0131r. Bu duruma &#8220;callback hell&#8221; veya &#8220;pyramid of doom&#8221; denir. Promise&#8217;lar, bu sorunu \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>Promise Nedir?<\/h3>\n<p>Promise, hen\u00fcz bilinmeyen bir de\u011fer i\u00e7in bir proxy&#8217;dir. Asenkron bir i\u015flemin ba\u015far\u0131l\u0131 sonucunu veya ba\u015far\u0131s\u0131zl\u0131k nedenini temsil eder. Bir Promise, \u00f6zetle, gelecekte bir de\u011ferle yerine getirilebilecek veya bir nedenle reddedilebilecek bir taahh\u00fctt\u00fcr.<\/p>\n<p>Bir Promise&#8217;\u0131n \u00fc\u00e7 ana durumu (state) vard\u0131r:<\/p>\n<p>1.  <strong>Pending (Beklemede):<\/strong> Ba\u015flang\u0131\u00e7 durumu. Ne yerine getirilmi\u015f ne de reddedilmi\u015ftir. Asenkron i\u015flem hala devam etmektedir.<br \/>\n2.  <strong>Fulfilled (Yerine Getirildi\/Resolved):<\/strong> \u0130\u015flem ba\u015far\u0131yla tamamland\u0131 ve Promise bir de\u011fer d\u00f6nd\u00fcrd\u00fc.<br \/>\n3.  <strong>Rejected (Reddedildi):<\/strong> \u0130\u015flem ba\u015far\u0131s\u0131z oldu ve Promise bir hata nedeni (reason) d\u00f6nd\u00fcrd\u00fc.<\/p>\n<p>Bir Promise, &#8220;pending&#8221; durumundan &#8220;fulfilled&#8221; veya &#8220;rejected&#8221; durumuna ge\u00e7ebilir. Bu ge\u00e7i\u015fe &#8220;settled&#8221; (sonu\u00e7land\u0131) denir. Bir Promise bir kez sonu\u00e7land\u0131\u011f\u0131nda, durumu ve de\u011feri\/nedeni bir daha asla de\u011fi\u015fmez. Bu, Promise&#8217;lar\u0131n \u00f6nemli bir \u00f6zelli\u011fidir: durumlar\u0131 de\u011fi\u015fmezdir (immutable).<\/p>\n<h3>Promise Olu\u015fturma<\/h3>\n<p>Yeni bir Promise olu\u015fturmak i\u00e7in <code>new Promise()<\/code> yap\u0131c\u0131s\u0131n\u0131 kullan\u0131r\u0131z. Bu yap\u0131c\u0131, iki arg\u00fcman alan bir fonksiyon al\u0131r: <code>resolve<\/code> ve <code>reject<\/code>.<\/p>\n<pre><code class=\"language-javascript\">const myPromise = new Promise((resolve, reject) => {\n  \/\/ Asenkron bir i\u015flem sim\u00fcle edelim\n  const success = Math.random() > 0.5; \/\/ Rastgele ba\u015far\u0131\/ba\u015far\u0131s\u0131zl\u0131k\n\n  setTimeout(() => {\n    if (success) {\n      resolve('\u0130\u015flem ba\u015far\u0131yla tamamland\u0131!'); \/\/ Ba\u015far\u0131l\u0131 olursa resolve \u00e7a\u011fr\u0131l\u0131r\n    } else {\n      reject(new Error('\u0130\u015flem ba\u015far\u0131s\u0131z oldu!')); \/\/ Ba\u015far\u0131s\u0131z olursa reject \u00e7a\u011fr\u0131l\u0131r\n    }\n  }, 2000); \/\/ 2 saniye sonra sonu\u00e7lanacak\n});\n\nconsole.log('Promise olu\u015fturuldu, bekleniyor...');<\/code><\/pre>\n<p>*   <code>resolve(value)<\/code>: \u0130\u015flemin ba\u015far\u0131l\u0131 oldu\u011funu ve Promise&#8217;\u0131n <code>value<\/code> ile yerine getirildi\u011fini belirtir.<br \/>\n*   <code>reject(reason)<\/code>: \u0130\u015flemin ba\u015far\u0131s\u0131z oldu\u011funu ve Promise&#8217;\u0131n <code>reason<\/code> (genellikle bir <code>Error<\/code> nesnesi) ile reddedildi\u011fini belirtir.<\/p>\n<h3>Promise T\u00fcketme: .then(), .catch() ve .finally()<\/h3>\n<p>Bir Promise olu\u015fturulduktan sonra, onun sonucunu (ba\u015far\u0131 veya hata) dinlememiz gerekir. Bu, <code>.then()<\/code>, <code>.catch()<\/code> ve <code>.finally()<\/code> metotlar\u0131 arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r.<\/p>\n<h4>.then() Metodu<\/h4>\n<p><code>.then()<\/code> metodu, bir Promise ba\u015far\u0131yla yerine getirildi\u011finde veya reddedildi\u011finde \u00e7al\u0131\u015ft\u0131r\u0131lacak callback fonksiyonlar\u0131n\u0131 kaydetmek i\u00e7in kullan\u0131l\u0131r. \u0130ki opsiyonel arg\u00fcman al\u0131r:<\/p>\n<p>1.  <code>onFulfilled<\/code> (veya <code>onResolved<\/code>): Promise yerine getirildi\u011finde \u00e7a\u011fr\u0131lan fonksiyon. Promise&#8217;\u0131n ba\u015far\u0131 de\u011ferini arg\u00fcman olarak al\u0131r.<br \/>\n2.  <code>onRejected<\/code>: Promise reddedildi\u011finde \u00e7a\u011fr\u0131lan fonksiyon. Promise&#8217;\u0131n hata nedenini arg\u00fcman olarak al\u0131r.<\/p>\n<pre><code class=\"language-javascript\">myPromise.then(\n  (message) => {\n    console.log('Ba\u015far\u0131l\u0131:', message); \/\/ onFulfilled callback'i\n  },\n  (error) => {\n    console.error('Hata:', error.message); \/\/ onRejected callback'i\n  }\n);<\/code><\/pre>\n<p>Genellikle <code>onRejected<\/code> callback&#8217;ini <code>.then()<\/code> i\u00e7inde vermek yerine, hatalar\u0131 ayr\u0131 bir <code>.catch()<\/code> blo\u011funda ele almak daha iyi bir uygulamad\u0131r. Bu, kodun daha okunabilir olmas\u0131n\u0131 sa\u011flar ve Promise zincirindeki herhangi bir yerdeki hatay\u0131 yakalayabilir.<\/p>\n<h4>.catch() Metodu<\/h4>\n<p><code>.catch()<\/code> metodu, asl\u0131nda <code>.then(null, onRejected)<\/code> &#8216;in bir k\u0131saltmas\u0131d\u0131r ve sadece Promise reddedildi\u011finde \u00e7al\u0131\u015ft\u0131r\u0131lacak bir callback fonksiyonu kaydetmek i\u00e7in kullan\u0131l\u0131r. Promise zincirindeki herhangi bir \u00f6nceki Promise&#8217;dan gelen hatalar\u0131 yakalamak i\u00e7in idealdir.<\/p>\n<pre><code class=\"language-javascript\">myPromise\n  .then((message) => {\n    console.log('Ba\u015far\u0131l\u0131:', message);\n  })\n  .catch((error) => {\n    console.error('Hata yakaland\u0131:', error.message); \/\/ Promise zincirindeki herhangi bir hatay\u0131 yakalar\n  });<\/code><\/pre>\n<h4>.finally() Metodu (ES2018)<\/h4>\n<p><code>.finally()<\/code> metodu, Promise&#8217;\u0131n yerine getirilmi\u015f veya reddedilmi\u015f olmas\u0131na bak\u0131lmaks\u0131z\u0131n, Promise sonu\u00e7land\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak bir callback fonksiyonu kaydeder. Bu, temizlik i\u015flemleri (\u00f6rne\u011fin, bir y\u00fckleme g\u00f6stergesini gizleme) i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. <code>.finally()<\/code> callback&#8217;i herhangi bir arg\u00fcman almaz ve kendisi bir de\u011fer d\u00f6nd\u00fcrmez.<\/p>\n<pre><code class=\"language-javascript\">myPromise\n  .then((message) => {\n    console.log('Ba\u015far\u0131l\u0131:', message);\n  })\n  .catch((error) => {\n    console.error('Hata yakaland\u0131:', error.message);\n  })\n  .finally(() => {\n    console.log('Promise sonu\u00e7land\u0131, temizlik yap\u0131l\u0131yor...'); \/\/ Her durumda \u00e7al\u0131\u015f\u0131r\n  });<\/code><\/pre>\n<h3>Promise Zincirleme (Chaining)<\/h3>\n<p>Promise&#8217;lar\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri, zincirlenebilme yetenekleridir. <code>.then()<\/code> metodu her zaman yeni bir Promise d\u00f6nd\u00fcr\u00fcr. Bu, birden fazla asenkron i\u015flemi s\u0131rayla y\u00fcr\u00fctmek i\u00e7in Promise&#8217;lar\u0131 art arda \u00e7a\u011f\u0131rabilece\u011fimiz anlam\u0131na gelir.<\/p>\n<p>Bir <code>.then()<\/code> callback&#8217;inden bir de\u011fer d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fczde, bu de\u011fer bir sonraki <code>.then()<\/code> callback&#8217;ine arg\u00fcman olarak iletilir.<\/p>\n<pre><code class=\"language-javascript\">function adim1() {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      console.log('Ad\u0131m 1 tamamland\u0131');\n      resolve(10); \/\/ 10 de\u011ferini d\u00f6nd\u00fcr\n    }, 1000);\n  });\n}\n\nfunction adim2(oncekiDeger) {\n  return new Promise((resolve) => {\n    setTimeout(() => {\n      console.log('Ad\u0131m 2 tamamland\u0131, \u00f6nceki de\u011fer:', oncekiDeger);\n      resolve(oncekiDeger * 2); \/\/ \u00d6nceki de\u011feri ikiyle \u00e7arp\n    }, 1000);\n  });\n}\n\nfunction adim3(oncekiDeger) {\n  return new Promise((resolve, reject) => {\n    setTimeout(() => {\n      console.log('Ad\u0131m 3 tamamland\u0131, \u00f6nceki de\u011fer:', oncekiDeger);\n      if (oncekiDeger > 15) {\n        resolve('T\u00fcm ad\u0131mlar ba\u015far\u0131yla tamamland\u0131, sonu\u00e7: ' + oncekiDeger);\n      } else {\n        reject(new Error('Ad\u0131m 3 ba\u015far\u0131s\u0131z: De\u011fer \u00e7ok k\u00fc\u00e7\u00fck!'));\n      }\n    }, 1000);\n  });\n}\n\nadim1()\n  .then(adim2) \/\/ adim1'in sonucunu adim2'ye ilet\n  .then(adim3) \/\/ adim2'nin sonucunu adim3'e ilet\n  .then((finalSonuc) => {\n    console.log('Nihai Sonu\u00e7:', finalSonuc);\n  })\n  .catch((hata) => {\n    console.error('Zincirleme s\u0131ras\u0131nda bir hata olu\u015ftu:', hata.message);\n  });<\/code><\/pre>\n<p>E\u011fer bir <code>.then()<\/code> callback&#8217;inden bir Promise d\u00f6nd\u00fcr\u00fcrseniz, zincir o Promise&#8217;\u0131n sonu\u00e7lanmas\u0131n\u0131 bekler ve ard\u0131ndan devam eder. Bu, i\u00e7 i\u00e7e Promise&#8217;lar\u0131 d\u00fczle\u015ftirmek (flattening) i\u00e7in \u00e7ok \u00f6nemlidir ve &#8220;callback hell&#8221; sorununu ortadan kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">fetch('\/api\/users\/1') \/\/ Birinci Promise\n  .then((response) => response.json()) \/\/ \u0130kinci Promise (response.json() da bir Promise d\u00f6nd\u00fcr\u00fcr)\n  .then((user) => fetch(<code>\/api\/posts?userId=${user.id}<\/code>)) \/\/ \u00dc\u00e7\u00fcnc\u00fc Promise\n  .then((response) => response.json())\n  .then((posts) => {\n    console.log('Kullan\u0131c\u0131n\u0131n g\u00f6nderileri:', posts);\n  })\n  .catch((error) => {\n    console.error('Veri \u00e7ekme hatas\u0131:', error);\n  });<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>fetch<\/code> API&#8217;si (ki kendisi bir Promise d\u00f6nd\u00fcr\u00fcr) ile kullan\u0131c\u0131 verilerini \u00e7ekiyor, ard\u0131ndan bu kullan\u0131c\u0131n\u0131n ID&#8217;sini kullanarak g\u00f6nderilerini \u00e7ekiyoruz. Her <code>.then()<\/code> blo\u011fu bir \u00f6nceki Promise&#8217;\u0131n sonucunu i\u015fler ve bir sonraki asenkron i\u015flemi ba\u015flat\u0131r.<\/p>\n<h3>Promise&#8217;larda Hata Y\u00f6netimi<\/h3>\n<p>Promise zincirlemesinde hata y\u00f6netimi olduk\u00e7a etkilidir. Bir Promise zincirinde herhangi bir noktada bir Promise reddedilirse (veya bir <code>.then()<\/code> callback&#8217;i i\u00e7inde bir hata f\u0131rlat\u0131l\u0131rsa), zincirdeki sonraki ba\u015far\u0131l\u0131 <code>.then()<\/code> callback&#8217;leri atlan\u0131r ve kontrol, zincirdeki ilk <code>.catch()<\/code> callback&#8217;ine ge\u00e7er.<\/p>\n<pre><code class=\"language-javascript\">new Promise((resolve, reject) => {\n  console.log('Ba\u015flang\u0131\u00e7');\n  \/\/ throw new Error('Beklenmedik bir hata!'); \/\/ Bu da yakalan\u0131r\n  reject(new Error('\u0130lk Promise reddedildi!'));\n})\n  .then(() => {\n    console.log('Bu blok \u00e7al\u0131\u015fmayacak.');\n    return 'Ba\u015far\u0131l\u0131 ad\u0131m';\n  })\n  .then((data) => {\n    console.log('Bu da \u00e7al\u0131\u015fmayacak:', data);\n  })\n  .catch((error) => {\n    console.error('Hata yakaland\u0131:', error.message); \/\/ Buras\u0131 \u00e7al\u0131\u015facak\n    \/\/ Hatan\u0131n ard\u0131ndan bir de\u011fer d\u00f6nd\u00fcrerek zinciri devam ettirebiliriz\n    return 'Hata sonras\u0131 devam eden de\u011fer';\n  })\n  .then((data) => {\n    console.log('Hata sonras\u0131 devam eden blok:', data); \/\/ Buras\u0131 \u00e7al\u0131\u015facak\n  })\n  .finally(() => {\n    console.log('Her zaman \u00e7al\u0131\u015f\u0131r');\n  });<\/code><\/pre>\n<p>Bir <code>.catch()<\/code> blo\u011fu, yakalad\u0131\u011f\u0131 hatay\u0131 ele ald\u0131ktan sonra bir de\u011fer d\u00f6nd\u00fcr\u00fcrse, zincir ba\u015far\u0131yla devam eder. E\u011fer <code>.catch()<\/code> blo\u011fu bir hata f\u0131rlat\u0131rsa veya bir Promise&#8217;\u0131 reddederse, hata zincirde a\u015fa\u011f\u0131 do\u011fru yay\u0131lmaya devam eder.<\/p>\n<p><strong>\u00d6nemli:<\/strong> Promise&#8217;lar i\u00e7inde olu\u015fan yakalanmayan hatalar (unhandled rejections), taray\u0131c\u0131 konsolunda uyar\u0131 olarak g\u00f6r\u00fcn\u00fcr ve Node.js ortam\u0131nda uygulaman\u0131n \u00e7\u00f6kmesine neden olabilir. Bu nedenle her Promise zincirinin sonunda bir <code>.catch()<\/code> blo\u011fu bulundurmak iyi bir uygulamad\u0131r.<\/p>\n<h3>Statik Promise Metotlar\u0131<\/h3>\n<p>Promise API&#8217;si, birden fazla Promise ile \u00e7al\u0131\u015fmak i\u00e7in \u00e7e\u015fitli statik metotlar sunar:<\/p>\n<h4>Promise.all(iterable)<\/h4>\n<p><code>Promise.all()<\/code>, bir Promise dizisi (veya herhangi bir iterable) al\u0131r ve t\u00fcm Promise&#8217;lar ba\u015far\u0131yla yerine getirildi\u011finde kendisi de yerine getirilen yeni bir Promise d\u00f6nd\u00fcr\u00fcr. E\u011fer dizideki Promise&#8217;lardan herhangi biri reddedilirse, <code>Promise.all()<\/code> hemen reddedilir ve reddedilen ilk Promise&#8217;\u0131n hata nedenini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>Ba\u015far\u0131l\u0131 durumda, d\u00f6nd\u00fcr\u00fclen Promise, girdi dizisindeki Promise&#8217;lar\u0131n yerine getirilen de\u011ferlerini i\u00e7eren bir dizi ile \u00e7\u00f6z\u00fcmlenir (s\u0131ralama orijinal diziyle ayn\u0131d\u0131r).<\/p>\n<pre><code class=\"language-javascript\">const promise1 = Promise.resolve(3);\nconst promise2 = 42; \/\/ Promise olmayan de\u011ferler de kabul edilir, hemen \u00e7\u00f6z\u00fcmlenir\nconst promise3 = new Promise((resolve, reject) => {\n  setTimeout(resolve, 100, 'foo');\n});\n\nPromise.all([promise1, promise2, promise3])\n  .then((values) => {\n    console.log(values); \/\/ [3, 42, \"foo\"]\n  })\n  .catch((error) => {\n    console.error('Promise.all hatas\u0131:', error);\n  });\n\n\/\/ Hata \u00f6rne\u011fi\nconst p1 = new Promise((resolve) => setTimeout(() => resolve('P1'), 100));\nconst p2 = new Promise((_, reject) => setTimeout(() => reject(new Error('P2 hatas\u0131')), 50)); \/\/ Daha h\u0131zl\u0131 reddedilir\nconst p3 = new Promise((resolve) => setTimeout(() => resolve('P3'), 200));\n\nPromise.all([p1, p2, p3])\n  .then((values) => console.log(values))\n  .catch((error) => console.error(error.message)); \/\/ P2 hatas\u0131<\/code><\/pre>\n<p><code>Promise.all()<\/code>, birden fazla ba\u011f\u0131ms\u0131z asenkron i\u015flemi paralel olarak ba\u015flatmak ve hepsinin tamamlanmas\u0131n\u0131 beklemek istedi\u011finiz durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Promise.race(iterable)<\/h4>\n<p><code>Promise.race()<\/code>, bir Promise dizisi al\u0131r ve dizideki Promise&#8217;lardan herhangi biri yerine getirilir veya reddedilirse, kendisi de ayn\u0131 \u015fekilde sonu\u00e7lanan bir Promise d\u00f6nd\u00fcr\u00fcr. Yani, &#8220;yar\u0131\u015f\u0131&#8221; ilk bitiren Promise&#8217;\u0131n sonucunu (de\u011fer veya hata) d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">const pRace1 = new Promise((resolve) => setTimeout(() => resolve('Birinci'), 500));\nconst pRace2 = new Promise((resolve) => setTimeout(() => resolve('\u0130kinci'), 100)); \/\/ Daha h\u0131zl\u0131\n\nPromise.race([pRace1, pRace2])\n  .then((value) => {\n    console.log(value); \/\/ \"\u0130kinci\"\n  })\n  .catch((error) => {\n    console.error('Promise.race hatas\u0131:', error);\n  });\n\n\/\/ Hata \u00f6rne\u011fi\nconst pRace3 = new Promise((resolve) => setTimeout(() => resolve('Ba\u015far\u0131l\u0131'), 500));\nconst pRace4 = new Promise((_, reject) => setTimeout(() => reject(new Error('Hata olu\u015ftu')), 100)); \/\/ Daha h\u0131zl\u0131 reddedilir\n\nPromise.race([pRace3, pRace4])\n  .then((value) => console.log(value))\n  .catch((error) => console.error(error.message)); \/\/ Hata olu\u015ftu<\/code><\/pre>\n<p><code>Promise.race()<\/code>, bir zaman a\u015f\u0131m\u0131 (timeout) uygulamak veya birden fazla kaynaktan veri \u00e7ekmeye \u00e7al\u0131\u015f\u0131rken en h\u0131zl\u0131 yan\u0131t\u0131 almak gibi durumlarda kullan\u0131labilir.<\/p>\n<h4>Promise.resolve(value)<\/h4>\n<p><code>Promise.resolve(value)<\/code>, verilen <code>value<\/code> ile hemen yerine getirilen bir Promise d\u00f6nd\u00fcr\u00fcr. E\u011fer <code>value<\/code> zaten bir Promise ise, o Promise&#8217;\u0131n kendisini d\u00f6nd\u00fcr\u00fcr. Bu, bir de\u011feri Promise&#8217;a d\u00f6n\u00fc\u015ft\u00fcrmek veya zaten sahip oldu\u011funuz bir de\u011feri bir Promise zincirine dahil etmek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-javascript\">Promise.resolve('Merhaba d\u00fcnya!')\n  .then((value) => console.log(value)); \/\/ Merhaba d\u00fcnya!\n\nconst p = Promise.resolve(new Promise((resolve) => setTimeout(() => resolve('Zaten Promise'), 500)));\np.then((value) => console.log(value)); \/\/ Zaten Promise<\/code><\/pre>\n<h4>Promise.reject(reason)<\/h4>\n<p><code>Promise.reject(reason)<\/code>, verilen <code>reason<\/code> ile hemen reddedilen bir Promise d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">Promise.reject(new Error('Hata mesaj\u0131'))\n  .catch((error) => console.error(error.message)); \/\/ Hata mesaj\u0131<\/code><\/pre>\n<h4>Promise.allSettled(iterable) (ES2020)<\/h4>\n<p><code>Promise.allSettled()<\/code>, <code>Promise.all()<\/code>&#8216;a benzer \u015fekilde bir Promise dizisi al\u0131r, ancak t\u00fcm Promise&#8217;lar\u0131n yerine getirilmesini veya reddedilmesini bekler. Yani, t\u00fcm Promise&#8217;lar &#8220;settled&#8221; (sonu\u00e7lanm\u0131\u015f) oldu\u011funda kendisi de yerine getirilen bir Promise d\u00f6nd\u00fcr\u00fcr.<\/p>\n<p>D\u00f6nd\u00fcr\u00fclen Promise, her bir orijinal Promise&#8217;\u0131n sonucunu a\u00e7\u0131klayan bir nesneler dizisi ile \u00e7\u00f6z\u00fcmlenir. Her nesne, Promise&#8217;\u0131n durumunu (<code>status<\/code>: &#8216;fulfilled&#8217; veya &#8216;rejected&#8217;) ve ilgili de\u011ferini (<code>value<\/code>) veya nedenini (<code>reason<\/code>) i\u00e7erir.<\/p>\n<pre><code class=\"language-javascript\">const p1Settled = new Promise((resolve) => setTimeout(() => resolve('P1 ba\u015far\u0131l\u0131'), 100));\nconst p2Settled = new Promise((_, reject) => setTimeout(() => reject(new Error('P2 ba\u015far\u0131s\u0131z')), 200));\nconst p3Settled = Promise.resolve('P3 tamam');\n\nPromise.allSettled([p1Settled, p2Settled, p3Settled])\n  .then((results) => {\n    console.log(results);\n    \/*\n    [\n      { status: 'fulfilled', value: 'P1 ba\u015far\u0131l\u0131' },\n      { status: 'rejected', reason: Error: P2 ba\u015far\u0131s\u0131z },\n      { status: 'fulfilled', value: 'P3 tamam' }\n    ]\n    *\/\n  });<\/code><\/pre>\n<p><code>Promise.allSettled()<\/code>, t\u00fcm paralel g\u00f6revlerin sonu\u00e7lar\u0131n\u0131 bilmeniz gerekti\u011finde (baz\u0131lar\u0131 ba\u015far\u0131s\u0131z olsa bile) \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Promise.any(iterable) (ES2021)<\/h4>\n<p><code>Promise.any()<\/code>, bir Promise dizisi al\u0131r ve dizideki Promise&#8217;lardan herhangi biri yerine getirildi\u011finde kendisi de yerine getirilen bir Promise d\u00f6nd\u00fcr\u00fcr. E\u011fer dizideki t\u00fcm Promise&#8217;lar reddedilirse, <code>Promise.any()<\/code> bir <code>AggregateError<\/code> ile reddedilir ve bu hata, t\u00fcm reddedilme nedenlerini i\u00e7erir.<\/p>\n<pre><code class=\"language-javascript\">const pAny1 = new Promise((_, reject) => setTimeout(() => reject(new Error('Hata 1')), 500));\nconst pAny2 = new Promise((resolve) => setTimeout(() => resolve('Ba\u015far\u0131l\u0131 2'), 100)); \/\/ \u0130lk ba\u015far\u0131l\u0131 olan\nconst pAny3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Hata 3')), 200));\n\nPromise.any([pAny1, pAny2, pAny3])\n  .then((value) => {\n    console.log(value); \/\/ \"Ba\u015far\u0131l\u0131 2\"\n  })\n  .catch((error) => {\n    console.error('Promise.any hatas\u0131:', error.errors); \/\/ T\u00fcm hatalar\u0131 AggregateError i\u00e7inde g\u00f6sterir\n  });<\/code><\/pre>\n<p><code>Promise.any()<\/code>, birden fazla kaynaktan veri \u00e7ekmeye \u00e7al\u0131\u015f\u0131rken ve sadece ilk ba\u015far\u0131l\u0131 sonucu elde etmek istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h3>Promises ve Async\/Await (ES2017)<\/h3>\n<p>ES2017 ile tan\u0131t\u0131lan <code>async\/await<\/code> sentaktik \u015fekeri, Promise&#8217;lar \u00fczerine in\u015fa edilmi\u015ftir ve asenkron kodu senkron kod gibi yazmay\u0131 m\u00fcmk\u00fcn k\u0131lar. <code>async<\/code> anahtar kelimesi, bir fonksiyonun her zaman bir Promise d\u00f6nd\u00fcrece\u011fini belirtir. <code>await<\/code> anahtar kelimesi ise sadece <code>async<\/code> fonksiyonlar i\u00e7inde kullan\u0131labilir ve bir Promise&#8217;\u0131n \u00e7\u00f6z\u00fcmlenmesini bekler, ard\u0131ndan Promise&#8217;\u0131n de\u011ferini d\u00f6nd\u00fcr\u00fcr veya reddedilirse bir hata f\u0131rlat\u0131r.<\/p>\n<p><code>async\/await<\/code>, Promise&#8217;lar\u0131 do\u011frudan kullanmaktan daha okunabilir ve bak\u0131m\u0131 kolay kod yazmay\u0131 sa\u011flar, \u00f6zellikle karma\u015f\u0131k asenkron ak\u0131\u015flarda. Ancak, <code>async\/await<\/code>&#8216;in temelinde hala Promise&#8217;lar yatmaktad\u0131r, bu y\u00fczden Promise&#8217;lar\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak <code>async\/await<\/code>&#8216;i do\u011fru bir \u015fekilde kullanmak i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-javascript\">async function fetchUserData() {\n  try {\n    const userResponse = await fetch('\/api\/users\/1');\n    const user = await userResponse.json();\n\n    const postsResponse = await fetch(<code>\/api\/posts?userId=${user.id}<\/code>);\n    const posts = await postsResponse.json();\n\n    console.log('Kullan\u0131c\u0131:', user);\n    console.log('G\u00f6nderileri:', posts);\n  } catch (error) {\n    console.error('Veri \u00e7ekme hatas\u0131:', error);\n  } finally {\n    console.log('Veri \u00e7ekme i\u015flemi tamamland\u0131.');\n  }\n}\n\nfetchUserData();<\/code><\/pre>\n<p>Bu <code>async\/await<\/code> \u00f6rne\u011fi, \u00f6nceki Promise zincirleme \u00f6rne\u011fiyle ayn\u0131 i\u015fi yapar, ancak \u00e7ok daha d\u00fcz ve okunabilir bir \u015fekilde. Hata y\u00f6netimi i\u00e7in <code>try...catch<\/code> bloklar\u0131 kullan\u0131l\u0131r.<\/p>\n<h3>Promise Kullan\u0131m\u0131nda En \u0130yi Uygulamalar ve Yayg\u0131n Tuzaklar<\/h3>\n<p>*   <strong>Her Zaman <code>return<\/code> kullan\u0131n:<\/strong> Bir <code>.then()<\/code> callback&#8217;inden bir Promise veya bir de\u011fer d\u00f6nd\u00fcrmeyi unutmay\u0131n. Aksi takdirde zincir kopar ve bir sonraki <code>.then()<\/code> callback&#8217;i <code>undefined<\/code> bir de\u011ferle \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>Hata Y\u00f6netimini \u0130hmal Etmeyin:<\/strong> Her Promise zincirinin sonunda bir <code>.catch()<\/code> blo\u011fu bulundurmak, uygulaman\u0131z\u0131n beklenmedik hatalar kar\u015f\u0131s\u0131nda daha sa\u011flam olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Gereksiz \u0130\u00e7 \u0130\u00e7e Kullan\u0131mdan Ka\u00e7\u0131n\u0131n:<\/strong> Promise&#8217;lar\u0131n amac\u0131 callback hell&#8217;den ka\u00e7\u0131nmakt\u0131r. Promise&#8217;lar\u0131 i\u00e7 i\u00e7e kullanmak yerine zincirleme yap\u0131n.<br \/>\n*   <strong>Paralel G\u00f6revler i\u00e7in <code>Promise.all()<\/code> Kullan\u0131n:<\/strong> Birbirinden ba\u011f\u0131ms\u0131z birden fazla asenkron g\u00f6revi paralel olarak \u00e7al\u0131\u015ft\u0131rmak ve t\u00fcm\u00fcn\u00fcn bitmesini beklemek i\u00e7in <code>Promise.all()<\/code> idealdir.<br \/>\n*   <strong>Promise Yap\u0131c\u0131s\u0131 \u0130\u00e7inde Senkron Hatalar\u0131 Y\u00f6netin:<\/strong> <code>new Promise()<\/code> yap\u0131c\u0131s\u0131 i\u00e7indeki senkron kodda olu\u015fan hatalar otomatik olarak <code>reject<\/code> \u00e7a\u011fr\u0131s\u0131 gibi davran\u0131r. Ancak yine de <code>try...catch<\/code> kullanmak, hata ay\u0131klama s\u0131ras\u0131nda daha net bir niyet belirtir.<br \/>\n*   <strong>Promise&#8217;lar\u0131 \u0130ptal Etme:<\/strong> Promise&#8217;lar\u0131n yerle\u015fik bir iptal mekanizmas\u0131 yoktur. E\u011fer bir Promise&#8217;\u0131 iptal etmeniz gerekiyorsa, bu durumu kendi mant\u0131\u011f\u0131n\u0131zla y\u00f6netmeniz (\u00f6rne\u011fin, bir bayrak kullanarak veya <code>AbortController<\/code> gibi daha yeni API&#8217;leri kullanarak) gerekir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>JavaScript Promise&#8217;lar\u0131, ES6\/ES2015 ile birlikte asenkron programlamay\u0131 k\u00f6kten de\u011fi\u015ftirerek daha temiz, daha y\u00f6netilebilir ve daha g\u00fc\u00e7l\u00fc bir yap\u0131 sunmu\u015ftur. Callback hell&#8217;in karma\u015f\u0131kl\u0131\u011f\u0131ndan kurtulmam\u0131z\u0131 sa\u011flayarak, asenkron i\u015flemleri mant\u0131ksal bir s\u0131ra i\u00e7inde organize etmemize olanak tan\u0131r. <code>.then()<\/code>, <code>.catch()<\/code> ve <code>.finally()<\/code> metotlar\u0131 ile Promise zincirleme yetene\u011fi, karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131n\u0131 basitle\u015ftirir. <code>Promise.all()<\/code>, <code>Promise.race()<\/code> gibi statik metotlar, birden fazla Promise ile \u00e7al\u0131\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p><code>async\/await<\/code> gibi daha yeni \u00f6zellikler Promise&#8217;lar\u0131n \u00fczerine in\u015fa edilmi\u015f olsa da, Promise&#8217;lar\u0131n temel prensiplerini ve davran\u0131\u015flar\u0131n\u0131 anlamak modern JavaScript geli\u015ftirme i\u00e7in vazge\u00e7ilmezdir. Promise&#8217;lar, web uygulamalar\u0131n\u0131n performans\u0131n\u0131 ve kullan\u0131c\u0131 deneyimini art\u0131ran, g\u00fcvenilir ve okunabilir asenkron kod yazman\u0131n temel ta\u015f\u0131d\u0131r. Her JavaScript geli\u015ftiricisinin Promise&#8217;lar\u0131 derinlemesine kavramas\u0131, daha sa\u011flam ve s\u00fcrd\u00fcr\u00fclebilir uygulamalar olu\u015fturmas\u0131na yard\u0131mc\u0131 olacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc\nJavaScript, do\u011fas\u0131 gere\u011fi tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) bir di","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[129],"tags":[],"class_list":{"0":"post-34275","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-javascript","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>JavaScript&#039;te Promise&#039;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/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:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript&#039;te Promise&#039;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc\" \/>\n<meta property=\"og:description\" content=\"JavaScript&#039;te Promise&#039;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc JavaScript, do\u011fas\u0131 gere\u011fi tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) bir di\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-14T02:40:43+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc\",\"datePublished\":\"2025-11-14T02:40:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\"},\"wordCount\":2060,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Javascript\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\",\"name\":\"JavaScript'te Promise'lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-14T02:40:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"JavaScript'te Promise'lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/","og_locale":"tr_TR","og_type":"article","og_title":"JavaScript'te Promise'lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc","og_description":"JavaScript'te Promise'lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc JavaScript, do\u011fas\u0131 gere\u011fi tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) bir di","og_url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-14T02:40:43+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc","datePublished":"2025-11-14T02:40:43+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/"},"wordCount":2060,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Javascript"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/","url":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/","name":"JavaScript'te Promise'lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-14T02:40:43+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javascriptte-promiselar-es6-es2015-ile-asenkron-programlamanin-gucu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"JavaScript&#8217;te Promise&#8217;lar: ES6\/ES2015 ile Asenkron Programlaman\u0131n G\u00fcc\u00fc"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34275"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34275\/revisions"}],"predecessor-version":[{"id":34276,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34275\/revisions\/34276"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}