javascript - Tarvitseeko minun käyttää asyncia, jos funktio palauttaa promisen?
Minulla on tämä funktio luokassa. Se palauttaa lupauksen.
static blabla(): Promise <number> {
return new Promise < number > ((resolve) => {
resolve(999);
});
}
Tämä funktio toimii hyvin, mutta haluaisin varmistaa, tarvitseeko minun (hyvän käytännön vuoksi) käyttää async kuten
static async blabla(): Promise <number>
Vastaus #1
Sinun ei tarvitse käyttää async-avainsanaa, jos funktiosi palauttaa jo Promise-objektin. async-avainsana on hyödyllinen, jos haluat käyttää await-lausetta funktion sisällä, mikä helpottaa muiden lupausten käsittelyä. Koska funktiosi palauttaa suoraan Promise-objektin, se toimii hyvin ilman async-avainsanaa.
Sinun ei tarvitse käyttää async-avainsanaa JavaScriptissä, jos funktiosi jo palauttaa Promisen.
static blabla(): Promise<number> {
return new Promise<number>((resolve) => {
resolve(999);
});
}
Tässä on esimerkki siitä, miten voisit käyttää asynkronista ohjelmointia monimutkaisemmassa funktiossa:
static async example(): Promise<number> {
const result = await someAsyncFunction(); // Using await for another promise
return result + 999; // Now it makes sense to use async
}
Vastaus #2
"async"-avainsanaa käytetään tekemään funktiosta ns. 'Promise' palauttava funktio implisiittisesti ja sallimaan 'await'-avainsanan käyttö funktion sisällä. Sinun tapauksessasi, koska funktio jo palauttaa 'Promisen' eksplisiittisesti eikä käytä 'await'-avainsanaa, 'async'-avainsanan käyttäminen ei ole tarpeen.
JOS vaadit ja haluat lisätä "async", voit ja sinun pitäisi refaktoroida funktio seuraavasti: static async blabla(): Promise<number> { return 999; } Funktio palauttaa nyt implisiittisesti "Promise"-olion ja async-avainsana tekee tästä selkeän.
Molemmat versiot ovat toiminnallisesti yhdenvertaisia.
