async
Anahtar kelimeyle işaretlenen eşzamansız işlevlerin örtük olarak bir söz verdiğini okudum :
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
ama bu tutarlı ... varsayarak değil doSomethingAsync()
bir söz döner ve bekliyoruz kelime vaadi değeri dönecektir, sonra benim getVal fonksiyonu, itsef vaat should bu değeri değil, örtük bir söz döner.
Peki durum tam olarak nedir? Async anahtar kelimesiyle işaretlenen işlevler dolaylı olarak vaatleri mi döndürür yoksa geri döneceklerini biz mi kontrol ederiz?
Belki de bir şeyi açıkça iade etmezsek, dolaylı olarak bir söz verirler ...?
Daha açık olmak gerekirse, yukarıdakiler ile
function doSomethingAync(charlie) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(charlie || 'yikes');
}, 100);
})
}
async function getVal(){
var val = await doSomethingAync(); // val is not a promise
console.log(val); // logs 'yikes' or whatever
return val; // but this returns a promise
}
var ret = getVal();
console.log(ret); //logs a promise
Benim özetime göre, davranış gerçekten de geleneksel dönüş ifadeleriyle tutarsız. Görünüşe göre, bir async
işlevden taahhüt edilmeyen bir değeri açık bir şekilde döndürdüğünüzde , onu bir sözde sarmaya zorlayacaktır. Bununla ilgili büyük bir sorunum yok, ancak normal JS'ye meydan okuyor.
console.log
gösteriyor?