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 το καθιστά σαφές.
Και οι δύο εκδόσεις είναι ισοδύναμες σε λειτουργικότητα.
