Created
March 8, 2017 14:45
-
-
Save ysfzrn/de96ec1f30dc2a28f1eb99ea91db6b6e to your computer and use it in GitHub Desktop.
Then-able Duck Typing-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-----Then-able Duck Typing------------ | |
Promise dünyasında en önemli şey, bir değişkenin gerçek bir Promise olup,olmadığına | |
karar vermek ya da bir Promise gibi davranış sergileyecek mi onu anlamak. | |
new Promise(...) syntax ı ile verilen Promise lerin, | |
'p instanceof Promise' bu şekilde kontrolünü yapabileceğini düşünebilirsin ama tam | |
oarak bu yaklaşım doğru olmayabilir. | |
Mesela sen başka bir window dan iframe gibi yerlerden Promise alabilirsin. O zaman | |
'p instanceof Promise' kontrolü başarısız olacaktır. | |
Her object ve function 'then(..)'' methoduna sahiptir. | |
Genel anlamıyla, 'type checks' (objenin propertie kontrolleri) "duck typing" diye | |
isimlendirilir."If it looks like a duck and quacks like a duck, it must be a duck" | |
if(p!==null && | |
(typeof p === 'object' || typeof p === 'function') && | |
typeof p.then === 'function'){ | |
//assume it is a then-able | |
}else{ | |
// not a then-able | |
} | |
Böyle kontrol yapamazsın diyemem ama garanti değil. Promise olmayan bir obje Promise gibi | |
tanımlanmış olabilir. | |
---PROMISE TRUST------------------- | |
Callback deki gibi güven politikamızı yazalım. | |
- Callback çok erken çağrılabilir | |
- Callback çok geç ya da hiç çağrılmayabilir | |
- Gereksiz ya da yanlış parametre geçersek ne olacak | |
- Hatalar, exceptionlar etc. | |
-Calling Too Early | |
Bu Promise ler için pek geçerli durum değil. Çünkü Promise her zaman asyncronously | |
olarak çalışır | |
--Calling Too Late | |
Bu durum da sıkıntı değil. | |
var p3 = new Promise(function(res, rej){ | |
res("B"); | |
}); | |
var p1 = new Promise(function(res, rej){ | |
res(p3); | |
}); | |
var p2 = new Promise(function(res, rej){ | |
res("A"); | |
}); | |
p1.then(function(v){ | |
console.log(v); | |
}) | |
p2.then(function(v){ | |
console.log(v); | |
}) | |
---1-----------------2------ | |
1. p1.then p2.then | |
2. p3 res('A') | |
3. res('B') | |
Böylece console a 'A, B' yazıldı. Sanıldığı gibi 'B,A' değil. Her şey sırayla | |
---NEVER CALLING THE CALLBACK----------------- | |
En önemli olarak, biz foo() dan gelen bir sonuç var mı bunu garantilemeliyiz ki program | |
takılı kalmasın. | |
function timeoutPromise(delay){ | |
return new Promise(function(res, rej){ | |
setTimeout(function(){ | |
rej("Timeout!"); | |
}, delay) | |
}) | |
} | |
Promise.race([ | |
foo(), | |
timeoutPromise(3000) | |
]) | |
.then(function(){ | |
//foo | |
}, | |
function(err){ | |
//err | |
} | |
); | |
---Calling Too Few or Too ManyTimes------- | |
Promise de dert değil :) | |
---TRUSTABLE PROMISE------------ | |
var p1=new Promise(function(resolve,reject){ | |
resolve(42); | |
}); | |
var p2=Promise.resolve(42); | |
p1 === p2 | |
------------------------------------------- | |
var p1 = Promise.resolve(42); | |
var p2 = Promise.resolve(p1); | |
p1===p2 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment