Promise yapıcı yürütme işlevi içinde vaatleri etkili bir şekilde kullanıyorsunuz, bu nedenle bu Promise kurucusu anti-modeldir .
Kodunuz ana riske iyi bir örnektir: tüm hataları güvenli bir şekilde yaymamak. Neden orada okuyun .
Ek olarak, async
/ kullanımı await
aynı tuzakları daha da şaşırtıcı hale getirebilir. Karşılaştırmak:
let p = new Promise(resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
naif (yanlış) bir async
eşdeğerle:
let p = new Promise(async resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
Sonuncusu için tarayıcınızın web konsoluna bakın.
İlki işe yarıyor çünkü bir Promise yapıcı yürütme işlevindeki herhangi bir acil istisna, yeni oluşturulan vaadi uygun bir şekilde reddediyor (ancak .then
kendi başınasın.
İkincisi çalışmaz çünkü bir async
işlevdeki herhangi bir acil istisna , async
işlevin kendisi tarafından döndürülen örtük vaadi reddeder .
Bir promise yapıcı çalıştırıcı işlevinin dönüş değeri kullanılmadığından, bu kötü bir haber!
Senin kodun
Tanımlamak için hiçbir sebep yok myFunction
olarak async
:
async function myFunction() {
let array = await getAsyncArray();
return new Promise((resolve, reject) => {
eachLimit(array, 500, (item, callback) => {
}, error => {
if (error) return reject(error);
});
});
}
Yine de varken neden güncel olmayan eşzamanlılık kontrol kitaplıkları kullanasınız await
?