|
| 1 | +--- |
| 2 | +chapter: 18 |
| 3 | +pageNumber: 89 |
| 4 | +--- |
| 5 | + |
| 6 | +# Bölüm 18 |
| 7 | + |
| 8 | +# Promise, async/await |
| 9 | + |
| 10 | +Bir popüler kitap yazarı olduğunuzu ve belirli bir günde yeni bir kitap yayınlamayı planladığınızı hayal edin. Bu kitaba ilgi duyan okuyucular, bu kitabı listelerine ekliyor ve yayınlandığında veya yayın tarihi ertelendiğinde bile bilgilendiriliyor. Yayın günü geldiğinde, herkes bilgilendirilir ve kitabı satın alabilir ve tüm taraflar mutlu olur. Bu, programlamada gerçekleşen gerçek hayattan bir analojidir. |
| 11 | + |
| 12 | +1. Bir "_producing code_" (_üreten kod_) zaman alan ve bir şeyleri başaran bir şeydir. Burada kitap yazarı. |
| 13 | +2. Bir "_consuming code_" (_tüketen kod_) üreten kodu hazır olduğunda tüketen kişidir. Bu durumda "okur"dur. |
| 14 | +3. "üreten kod" ile "tüketen kod" arasındaki bağlantı, sonuçları "üreten kod" dan "tüketen kod" a ulaştıracağı için bir sözleşme olarak adlandırılabilir. |
| 15 | + |
| 16 | +# Promise |
| 17 | + |
| 18 | +Yaptığımız analoji, JavaScript promise nesnesi için de geçerlidir. promise nesnesi için kurucu sözdizimi şöyledir: |
| 19 | + |
| 20 | +```javascript |
| 21 | +let promise = new Promise(function (resolve, reject) { |
| 22 | + // executor (the producing code, "writer") |
| 23 | +}); |
| 24 | +``` |
| 25 | + |
| 26 | +Burada, `new Promise`'ye bir işlev geçirilir, buna executor da denir ve oluşturulurken otomatik olarak çalışır. Sonuç veren üreten kodu içerir. `resolve` ve `rejects` JavaScript tarafından sağlanan ve sonuçlar üzerine çağrılan argümanlardır. |
| 27 | + |
| 28 | +- `resolve(value):` sonuç üzerine value döndüren bir callback fonksiyonu |
| 29 | +- `reject(error)`: hata üzerine `error` döndüren bir callback fonksiyonu, bir error nesnesi döndürür |
| 30 | + |
| 31 | + |
| 32 | + |
| 33 | +`new Promise` kurucusu tarafından döndürülen `promise` nesnesinin iç özellikleri şunlardır: |
| 34 | + |
| 35 | +- `state` - başlangıçta `pending`, ardından `fulfill` olmak üzere üzerine resolve veya `rejected` üzerine `reject` çağrıldığında değişir |
| 36 | + |
| 37 | +- result - başlangıçta `undefined`, ardından `resolve` üzerine `value` veya `reject` üzerine `error` değişir |
| 38 | + |
| 39 | +{% hint style="warning" %} |
| 40 | +Promise özelliklerine `state` ve `result` erişilemez. Promise'leri işlemek için promise yöntemlerine ihtiyaç vardır. |
| 41 | +{% endhint %} |
| 42 | + |
| 43 | +Promise örneği: |
| 44 | + |
| 45 | +```javascript |
| 46 | +let promiseOne = new Promise(function (resolve, reject) { |
| 47 | + // the function is executed automatically when the promise is constructed |
| 48 | + |
| 49 | + // after 1-second signal that the job is done with the result "done" |
| 50 | + setTimeout(() => resolve("done"), 1000); |
| 51 | +}); |
| 52 | + |
| 53 | +let promiseTwo = new Promise(function (resolve, reject) { |
| 54 | + // the function is executed automatically when the promise is constructed |
| 55 | + |
| 56 | + // after 1-second signal that the job is done with the result "error" |
| 57 | + setTimeout(() => reject(new Error("Whoops!")), 1000); |
| 58 | +}); |
| 59 | +``` |
| 60 | + |
| 61 | +Burada, `promiseOne` "yerine getirilmiş promise" örneğidir, çünkü değerler başarıyla çözüldüğünden, `promiseTwo` ise reddedildiği için "reddedilmiş promise" örneğidir. Reddedilmiş veya yerine getirilmiş bir promise, yerleşik promise olarak adlandırılır, aksine başlangıçta bekleyen promise. Promise'den tüketen fonksiyon `.then` ve `.catch` yöntemleri kullanılarak kaydedilebilir. Ayrıca, önceki yöntemlerin tamamlanmasından sonra temizleme veya sonlandırma için `.finally` yöntemini de ekleyebilirsiniz. |
| 62 | + |
| 63 | +```javascript |
| 64 | +let promiseOne = new Promise(function (resolve, reject) { |
| 65 | + setTimeout(() => resolve("done!"), 1000); |
| 66 | +}); |
| 67 | + |
| 68 | +// resolve runs the first function in .then |
| 69 | +promiseOne.then( |
| 70 | + (result) => alert(result), // shows "done!" after 1 second |
| 71 | + (error) => alert(error) // doesn't run |
| 72 | +); |
| 73 | + |
| 74 | +let promiseTwo = new Promise(function (resolve, reject) { |
| 75 | + setTimeout(() => reject(new Error("Whoops!")), 1000); |
| 76 | +}); |
| 77 | + |
| 78 | +// reject runs the second function in .then |
| 79 | +promiseTwo.then( |
| 80 | + (result) => alert(result), // doesn't run |
| 81 | + (error) => alert(error) // shows "Error: Whoops!" after 1 second |
| 82 | +); |
| 83 | + |
| 84 | +let promiseThree = new Promise((resolve, reject) => { |
| 85 | + setTimeout(() => reject(new Error("Whoops!")), 1000); |
| 86 | +}); |
| 87 | + |
| 88 | +// .catch(f) is the same as promise.then(null, f) |
| 89 | +promiseThree.catch(alert); // shows "Error: Whoops!" after 1 second |
| 90 | +``` |
| 91 | + |
| 92 | +{% hint style="warning" %} |
| 93 | +`Promise.then()` metodunda, her iki callback argümanının da kullanımı isteğe bağlıdır. |
| 94 | +{% endhint %} |
0 commit comments