Günün Özellikleri: ES7 Async Fonksiyonları

Çoğu Web ve JavaScript geliştiricisi, ECMAScript6 standardının veya tam tarayıcı desteğinin nihai onayını hevesle bekliyor, ancak yalnızca çok azı ES7’nin bir sonraki sürümü için planlanan özelliklerle ilgilenecek gibi görünüyor. Temel unsurlardan birine göz atmak için iyi bir fırsat: sözde zaman uyumsuz işlevler.


Aşağıdaki web sitesi, bireysel ES7 özelliklerinin çeşitli çalışma zamanı ortamlarında halihazırda ne ölçüde uygulandığına ilişkin bir genel bakış sunar. Gördüğünüz gibi: destek – mantıksal olarak – ES6 için olduğu kadar gelişmiş değil (karşılaştırma için), ancak bazı özellikler zaten Google Traceur ve Babel aktarıcılarında test edilebilir. Aşağıdaki kod örneklerini denemek için en kolay yol, Google Traceur çevrimiçi demosunu kullanmaktır. ES7 işlevleri, “Seçenekler” menüsünde “Tüm seçenekleri göster” menü öğesi aracılığıyla etkinleştirilebilir.

Eşzamansız programlama, JavaScript’te oldukça karmaşık hale gelebilir. Özellikle, eşzamansız işlev çağrıları iç içe geçtiğinde, kaynak metnin okunabilirliği hızla zarar görür. Bu “Geri Arama Cehennemi”nden kurtulmak için, JavaScript geliştiricileri zaman uyumsuz veya ES6 ile vaatler gibi kitaplıklara başvurabilir. Ancak ES7’de, sözde eşzamansız işlevlerle bir adım daha ileri gitmek ve iki yeni anahtar sözcükle eşzamansız işlevleri tanımlamayı daha da kolaylaştırmak istiyorlar.

Üstünde eşzamansız eşzamansız bir işlev, karşılık gelen işlev bildiriminin önüne yazılan anahtar sözcükle bu şekilde işaretlenir. Dahili olarak bu, bu işlevin her zaman dolaylı olarak bir sözkaynak metinde gerçekte farklı bir değer döndürülse bile nesne.

Aşağıdaki kod…

// Options: --async-functions
async function randomResult() {
var number = Math.floor(Math.random() * 4711);
if(number > 4711) {
return 'Success!';
} else {
throw 'Failure!';
}
}

… aşağıdaki taahhüt tabanlı kodla aynı şeyi yapar:

function randomResult() {
var number = Math.floor(Math.random() * 4711);
if(number > 4711) {
return Promise.resolve('Success!');
} else {
return Promise.reject('Failure!');
}
}


bir con içinde eşzamansız işaretli zaman uyumsuz işlev artık anahtar kelime olabilir Beklemek kullanım. Bunu bir işlev çağrısından önce koymak, çağıran işlevin eşzamansız işlev çağrısının sonucu bilinene kadar beklemesine neden olur. Aşağıdaki listede basit bir örnek gösterilmektedir. İşlev rastgele mesaj() bir zaman gecikmesi (eşzamansızlığın görünümünü simüle etmek için), bir hata veya rasgele bir sayıya dayalı normal bir dönüş değeri döndürür. Çağıran işlevin içinde randomMessageTest() şimdi belirtmen yeterli Beklemekişlevin yürütülmesini yalnızca yürütüldükten sonra devam ettirmek için rastgele mesaj() Tamamlandı.

// Options: --async-functions
async function randomMessage() {
var number = Math.floor(Math.random() * 4711);
return new Promise(function(resolve, reject) {
setTimeout(function() {
if(number > 2222) {
resolve('Success: ' + number);
} else {
reject('Failure: ' + number);
}
}, 1000);
});
}
async function randomMessageTest() {
var message = await randomMessage();
console.log(message);
}
randomMessageTest();

Geri arama işlevlerini kullanmanın aksine, bu kaynak kodun okunması ve anlaşılması çok daha kolaydır. Bu, özellikle aşağıdaki listede olduğu gibi birden çok eşzamansız işlev çağrısı arka arkaya sıralandığında daha net hale gelir. Geri arama işlevleriyle iç içe ve girintili işlev çağrılarının kafa karıştırıcı bir karmaşasına dönüşecek olan şey, zaman uyumsuz işlevlerle çok daha net kalır.

// Options: --async-functions
async function random() {
var number = Math.floor(Math.random() * 4711);
return new Promise(function(resolve, reject) {
setTimeout(function() {
if(number > 2222) {
resolve('Success: ' + number);
} else {
reject('Failure: ' + number);
}
}, 1000);
});
}
async function randomMessageTest() {
var message = await randomMessageTest2();
console.log('randomMessageTest: ' + message);
return message;
}
async function randomMessageTest2() {
var message = await randomMessageTest3();
console.log('randomMessageTest2: ' + message);
return message;
}
async function randomMessageTest3() {
var message = await randomMessageTest4();
console.log('randomMessageTest3: ' + message);
return message;
}
async function randomMessageTest4() {
var message = await random();
console.log('randomMessageTest4: ' + message);
return message;
}
randomMessageTest();

TC39 itibariyle, Eşzamansız İşlevler teklifi şu anda ECMAScript standardına dahil edilmek üzere dört adımlı sürecin 1. aşamasındadır (“Teklif”). Şimdiye kadar hiçbir tarayıcı bu özelliği desteklemediğinden, şu anda Google Traceur gibi aktarıcılara güveniyorsunuz.


()



Haberin Sonu
 
Üst