جافا سكريبت - هل أحتاج لاستخدام async إذا كانت الدالة تُرجع وعدًا؟
لدي هذه الدالة في صف. إنها تُرجع وعداً.
static blabla(): Promise <number> {
return new Promise < number > ((resolve) => {
resolve(999);
});
}
تعمل هذه الدالة بشكل جيد، لكني أرغب في التأكد مما إذا كنت بحاجة (للممارسة الجيدة) لاستخدام async مثل
static async blabla(): Promise <number>
الإجابة رقم 1
لا تحتاج إلى استخدام async إذا كانت دالتك تُرجع بالفعل Promise. كلمة async مفيدة إذا أردت استخدام await داخل الدالة، مما يجعل من الأسهل العمل مع وعود أخرى. بما أن دالتك تُرجع Promise مباشرة، فإنها تعمل بشكل جيد بدون async.
لا تحتاج إلى استخدام الكلمة المفتاحية async في جافاسكريبت إذا كانت دالتك بالفعل تعيد 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" داخل الدالة. في حالتك، نظرًا لأن الدالة تُرجع بالفعل "Promise" صراحةً ولا تستخدم "await"، فإن استخدام "async" ليس ضروريًا.
إذا أصريت وترغب في إضافة "async" يمكنك ويجب عليك إعادة هيكلة الدالة لتكون: static async blabla(): Promise<number> { return 999; } الدالة الآن تعيد ضمنيًا "Promise" وكلمة async تجعل هذا واضحًا.
النسختان متكافئتان من حيث الوظائف.
