راکت
حل شده

سوال در مورد async functions

7 پاسخ

سلام وقت بخیر
من یه تابع به نام getUser‌دارم که اطلاعات یک کاربر رو از دیتابیس میگیره و پرامیس برمیگردونه
یه تابع دیگه هم به نام getuserAsync دارم که برای راحتی کار اینو نوشتم که همین کار رو به صورت async انجام میده . در واقع این تابع از تابع قبلی (getUser)‌استفاده میکنه. توابع رو تا اینحا براتون میزارم :

static getUser = (chatId) => {
        return new Promise((resolve, reject) => {
            mongo.getConnection()
                .then((db) => {
                    db.collection("users")
                        .findOne({chat_id : chatId}, (err, data) => {
                            if (err)
                                return reject(err)

                            return resolve(data)
                        })
                })
                .catch(reject)

        })
    }

    static getUserAsync = async (chatId) => {
        return await this.getUser(chatId)
    }

حالا جایی که میخوام از تابع getuserAsync استفاده کنم داره یه همچین چیزی رو برمیگردونه :

Promise { <pending> }

در واقع اینجا از getUserAsync استفاده کردم که خروجی بالا توی کنسول لاگ شده :‌

let user = UserRepository.getUserAsync(chatId)
            console.log(user)

مشکل کجاست؟

ثبت پرسش جدید

پاسخ‌ها

7
اشکان نظری
اشکان نظری
@ashkannazari248

تخصص: برنامه نویس

بهترین پاسخ

میتونی اینجوری بنویسی که زیباتر بشه

static getUser = async (chatId) => {
      let db=await mongo.getConnection()
      let user=await db.collection("users").findOne({chat_id : chatId});
      if (!user)
        //error
      return user
    }
woz
woz
@wozniak

تخصص: fan of open source world

@behzad.azizan1991
قسمت آخر رو به صورت زیر لاگ کنید ببینید جواب چی میشه :

UserRepository.getUserAsync(chatId).then(function(result) {
   console.log(result) 
})
بهزاد عزیزان
بهزاد عزیزان
@behzad.azizan

@behzadd بله اینجوری جواب داد
اما من میخوام به صورت async باشه

شاید پاسخ شما همین‌جا باشد

بهزاد عزیزان
بهزاد عزیزان
@behzad.azizan

@hesammousavi آقای موسوی میشه پاسخ بدید؟

بهزاد عزیزان
بهزاد عزیزان
@behzad.azizan

برای استفاده از async await باید از babel استفاده بشه؟

حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

درود بر شما در جای هم که میخواید از کد زیر استفاده کنید

let user = UserRepository.getUserAsync(chatId)
            console.log(user)

باید از await برای getUserAsync بهره ببرید حتما یعنی

let user = await UserRepository.getUserAsync(chatId)
            console.log(user)

یا به شکلی که دوستمون گفته عمل بفرمایید

UserRepository.getUserAsync(chatId).then(function(result) {
   console.log(result) 
})
بهزاد عزیزان
بهزاد عزیزان
@behzad.azizan

@hesammousavi ممنون پس با این شرایط نیازی به ساخت متد getUserAsync نیست درسته؟ (نمونه کدی که گذاشتم رو مطالعه بفرمایید من یک متد به اسم getUser دارم و یک متد دیگه به اسم getUserAsync ۹) اینطور که من متوجه شدم نیازی به متد getUserAsync نیست دیگه

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام