Neden işe yaramıyor diye kafamı dolamıyorum.
Çünkü mainbir söz verir; tüm asyncfonksiyonlar.
En üst düzeyde:
asyncAsla reddetmeyen bir üst düzey işlev kullanın ("işlenmeyen ret" hataları istemiyorsanız) veya
Kullanın thenve catch, veya
(Yakında!) Kullanımı üst düzeyawait , içinde Aşama 3 ulaşmış bir öneri sürecinin en üst düzey kullanımına izin awaitbir modülde.
# 1 - asyncAsla reddetmeyen en üst düzey işlev
(async () => {
try {
var text = await main();
console.log(text);
} catch (e) {
// Deal with the fact the chain failed
}
})();
Dikkat edin catch; Eğer gerekir gidiyor başka bir şey, çünkü söz ret / zaman uyumsuz istisnalar işlemek; onları aktaracak kimse yok. Eğer tercih ederseniz, aracılığıyla çağırmak sonucuna bunu yapabilir catchfonksiyonu (yerine try/ catchsözdizimi):
(async () => {
var text = await main();
console.log(text);
})().catch(e => {
// Deal with the fact the chain failed
});
... bu biraz daha özlü (bu nedenle hoşuma gidiyor).
Veya, elbette, hataları işlemeyin ve sadece "işlenmeyen ret" hatasına izin verin.
# 2 - thenvecatch
main()
.then(text => {
console.log(text);
})
.catch(err => {
// Deal with the fact the chain failed
});
catchHatalar zincirinde veya oluşursa işleyicisi çağrılır thenişleyicisi. ( catchİşleyicinizin hataları işlemeyecek hiçbir şey kaydedilmediğinden hata atmadığından emin olun .)
Veya her iki argüman da then:
main().then(
text => {
console.log(text);
},
err => {
// Deal with the fact the chain failed
}
);
Bir ret işleyicisini kaydettiğimizi bir kez daha unutmayın. Ancak bu formda, thengeri aramalarınızın hiçbirinin hata atmadığından, bunları işlemek için hiçbir şey kaydedilmediğinden emin olun .
awaitBir modülde 3. sırada
awaitModül olmayan bir komut dosyasının en üst düzeyinde kullanamazsınız , ancak üst düzey awaitteklif ( Aşama 3 ) bunu bir modülün en üst düzeyinde kullanmanıza izin verir. asyncÜst düzey kodunuzun reddedilmesini (hata atmasını) istemediğiniz için üst düzey işlev sarıcısı (yukarıdaki # 1) kullanmaya benzer, çünkü işlenmeyen bir ret hatasına neden olur. Bu nedenle, işler yanlış gittiğinde işlenmemiş reddedilmek istemiyorsanız, # 1'de olduğu gibi, kodunuzu bir hata işleyicisine sarmak istersiniz:
// In a module, once the top-level `await` proposal lands
try {
var text = await main();
console.log(text);
} catch (e) {
// Deal with the fact the chain failed
}
Bunu yaparsanız, modülünüzden içe aktarılan herhangi bir modülün söz verdiğinize kadar bekleyeceğini unutmayın await; üst seviyeyi kullanan bir modül awaitdeğerlendirildiğinde, temel olarak modül yükleyiciye ( asyncfonksiyonun yaptığı gibi) bir söz verir, bu da ona bağlı herhangi bir modülün gövdelerini değerlendirmeden önce bu sözün yerine getirilmesini bekler.
awaitsözthendizimi için şekerden başka bir şey değildir .