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.