Skip to content

Instantly share code, notes, and snippets.

@ysfzrn
Created March 8, 2017 14:45
Show Gist options
  • Save ysfzrn/de96ec1f30dc2a28f1eb99ea91db6b6e to your computer and use it in GitHub Desktop.
Save ysfzrn/de96ec1f30dc2a28f1eb99ea91db6b6e to your computer and use it in GitHub Desktop.
Then-able Duck Typing-
-----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