جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
sariapro
3 سال پیش توسط sariapro مطرح شد
2 پاسخ

کمک در درک کردن async در NodeJs

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

 async function salam(){
    return await new Promise((resolve,reject) => {
        reject('omm');
    })
}

و بعدش امدم به شکل زیر صداش زدم

salam()
.then(data => {
    console.log('OK');
    console.log(data);
})
.catch(err => {
    console.log('NOTOK');
    console.log(err);
});

console.log('After Salam');

انتظاری که من داشتم این هست که در خورجی این رو مشاهده کنم

NOTOK
omm
After Salam

اما چیزی که تو خروجی میگیرم این هست

After Salam
NOTOK
omm

احساس می کنم توی درک async و await دچار ایراد هستم.

ممنون میشم کمک کنید هم اشتباه کدم و متوجه بشم و هم کارکرد await و async رو


ثبت پرسش جدید
محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش آپدیت شد
1

سلام
نکته اول: در async فقط موارد داخلش خودش به ترتیب الویت اجرا میشه لذا در روشی که شما صدا زدید فقط ()salam مهمه و مابقیش لزوما به ترتیب اجرا نمیشه.

نکته دوم: الان داخل async فقط یک await داریم برای همین این شکلی نمیشه درک کرد. الان در قسمت فراخوانی ترتیب ها جابه جا شده اما اگر در async مثلا دوتا await داشتیم الزاما اون دوتا به ترتیب اجرا میشد.

 async function salam(){
    const result1 = await new Promise((resolve,reject) => {
        reject('sariapro');
    })
    const result2 = await new Promise((resolve,reject) => {
        reject('salam');
    })
}

پاسخ بالایی باید به ترتیب اول sariapro محاسبه میشه و بعدش salam

نکته سوم: ما در هر تابع میتونیم یک return داشته باشیم.
هدف اصلی این نوع توابع این هست که در یک تابع مثلا ابتدا داده هارو از دیتابیس استخراج کنیم و بعد عملیات روشون انجام بدیم. به دلیل اینکه امکان داره استخراج زمان زیادی ببره و وقتی که هنوز استخراج تمام نشده ، قسمت پردازش اجرا بشه و خطا بده.


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش آپدیت شد
0

سلام از async و await برای این استفاده می شود که در nodejs کدها به صورت synchronous اجرا شود.
شما اشتباه از این قابلیت استفاده کردید و باید به این شکل استفاده می کردید.

 function salam(){
    return new Promise((resolve,reject) => {
        reject('omm');
    })
}

let check = async () => { 
    try {
       await salam()
       console.log('OK');
           console.log(data);
    } catch (e) {
        console.log('NOTOK');
            console.log(e);
    }
    console.log('After Salam');
}

check()

@sariapro


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

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