javascript - Χρειάζεται να χρησιμοποιήσω async αν η συνάρτηση επιστρέφει ένα promise;


Έχω αυτή τη συνάρτηση σε μια κλάση. Επιστρέφει μια υπόσχεση.

static blabla(): Promise <number> {
  return new Promise < number > ((resolve) => {
    resolve(999);
  });
}

Αυτή η συνάρτηση λειτουργεί καλά αλλά θα ήθελα να επιβεβαιώσω αν χρειάζεται (για καλές πρακτικές) να χρησιμοποιήσω async όπως

static async blabla(): Promise <number>

Απάντηση #1

Δεν χρειάζεται να χρησιμοποιήσετε το async αν η συνάρτησή σας επιστρέφει ήδη ένα Promise. Η λέξη-κλειδί async είναι χρήσιμη αν θέλετε να χρησιμοποιήσετε await μέσα στη συνάρτηση, διευκολύνοντας τη δουλειά με άλλα promises. Εφόσον η συνάρτησή σας επιστρέφει απευθείας ένα Promise, λειτουργεί καλά χωρίς το async.

Δεν χρειάζεται να χρησιμοποιείτε τη λέξη-κλειδί async στο JavaScript αν η συνάρτησή σας επιστρέφει ήδη ένα Promise.

static blabla(): Promise<number> {
  return new Promise<number>((resolve) => {
    resolve(999);
  });
}

Εδώ είναι ένα παράδειγμα του πώς θα μπορούσατε να χρησιμοποιήσετε την ασύγχρονη προγραμματισμό σε μια πιο περίπλοκη συνάρτηση:

static async example(): Promise<number> {
  const result = await someAsyncFunction(); // Using await for another promise
  return result + 999; // Now it makes sense to use async
}

Απάντηση #2

Η λέξη-κλειδί «async» χρησιμοποιείται για να κάνει μια συνάρτηση να επιστρέφει μια «Υπόσχεση» (Promise) άμεσα και για να επιτρέπει τη χρήση της λέξης-κλειδί «await» μέσα στη συνάρτηση. Στην περίπτωσή σας, δεδομένου ότι η συνάρτηση ήδη επιστρέφει μια «Υπόσχεση» ρητά και δεν χρησιμοποιεί το «await», η χρήση του «async» δεν είναι απαραίτητη.

Αν επιμείνετε και θέλετε να προσθέσετε το "async", θα μπορούσατε και θα έπρεπε να αναδιαμορφώσετε τη συνάρτηση ώστε να είναι: static async blabla(): Promise<number> { return 999; } Η συνάρτηση τώρα επιστρέφει σιωπηρά "Promise" και η λέξη-κλειδί async το καθιστά σαφές.

Και οι δύο εκδόσεις είναι ισοδύναμες σε λειτουργικότητα.