جاوااسکریپت - آیا نیاز دارم از async استفاده کنم اگر تابع یک پرامیس برگرداند؟
من این تابع را در یک کلاس دارم. این یک پرامیس برمیگرداند.
static blabla(): Promise <number> {
return new Promise < number > ((resolve) => {
resolve(999);
});
}
این تابع به خوبی کار میکند اما میخواهم تأیید کنم که آیا لازم است (برای تمرین خوب) از async استفاده کنم مثل
static async blabla(): Promise <number>
پاسخ شماره ۱
شما نیازی به استفاده از async ندارید اگر تابع شما قبلاً یک Promise باز میگرداند. کلیدواژه async مفید است اگر بخواهید از await در داخل تابع استفاده کنید، که کار با دیگر پرامیسها را آسانتر میکند. از آنجایی که تابع شما مستقیماً یک Promise باز میگرداند، بدون async خوب کار میکند.
اگر تابع شما در حال حاضر یک Promise برمیگرداند، نیازی به استفاده از کلمه کلیدی async در جاوااسکریپت ندارید.
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
}
پاسخ شماره ۲
کلیدواژه «async» برای این استفاده میشود که یک تابع بهطور پنهان یک «Promise» بازگرداند و استفاده از کلیدواژه «await» را در داخل تابع ممکن سازد. در مورد شما، از آنجا که تابع قبلاً بهطور صریح یک «Promise» بازمیگرداند و از «await» استفاده نمیکند، استفاده از «async» ضروری نیست.
اگر اصرار دارید و میخواهید "async" را اضافه کنید، میتوانید و باید تابع را بازسازی کنید تا به صورت زیر باشد: static async blabla(): Promise<number> { return 999; } تابع اکنون بهطور ضمنی "Promise" برمیگرداند و کلیدواژه async این موضوع را روشن میکند.
هر دو نسخه از نظر عملکرد معادل هستند.
