بهزاد عزیزان
4 سال پیش توسط بهزاد عزیزان مطرح شد
7 پاسخ

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

سلام وقت بخیر
من یه تابع به نام 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)

مشکل کجاست؟


ثبت پرسش جدید
اشکان نظری
تخصص : برنامه نویس
@ashkannazari248 4 سال پیش مطرح شد
1

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

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
تخصص : fan of open source world
@wozniak 4 سال پیش مطرح شد
1

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

UserRepository.getUserAsync(chatId).then(function(result) {
   console.log(result) 
})

بهزاد عزیزان
@behzad.azizan 4 سال پیش مطرح شد
0

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


بهزاد عزیزان
@behzad.azizan 4 سال پیش مطرح شد
0

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


بهزاد عزیزان
@behzad.azizan 4 سال پیش مطرح شد
0

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


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
1

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

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 4 سال پیش مطرح شد
0

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


اشکان نظری
تخصص : برنامه نویس
@ashkannazari248 4 سال پیش مطرح شد
1

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

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

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

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