Neden işe yaramıyor diye kafamı dolamıyorum.
Çünkü main
bir söz verir; tüm async
fonksiyonlar.
En üst düzeyde:
async
Asla reddetmeyen bir üst düzey işlev kullanın ("işlenmeyen ret" hataları istemiyorsanız) veya
Kullanın then
ve 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 await
bir modülde.
# 1 - async
Asla 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 catch
fonksiyonu (yerine try
/ catch
sö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 - then
vecatch
main()
.then(text => {
console.log(text);
})
.catch(err => {
// Deal with the fact the chain failed
});
catch
Hatalar zincirinde veya oluşursa işleyicisi çağrılır then
iş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, then
geri aramalarınızın hiçbirinin hata atmadığından, bunları işlemek için hiçbir şey kaydedilmediğinden emin olun .
await
Bir modülde 3. sırada
await
Modül olmayan bir komut dosyasının en üst düzeyinde kullanamazsınız , ancak üst düzey await
teklif ( 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 await
değerlendirildiğinde, temel olarak modül yükleyiciye ( async
fonksiyonun 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.
await
sözthen
dizimi için şekerden başka bir şey değildir .