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ı awaitaynı 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 asynceş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 .thenkendi başınasın.
İkincisi çalışmaz çünkü bir asyncişlevdeki herhangi bir acil istisna , asynciş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 myFunctionolarak 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?