سلام
یه تابع نوشتم به شکل زیر
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 رو
سلام
نکته اول: در 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 داشته باشیم.
هدف اصلی این نوع توابع این هست که در یک تابع مثلا ابتدا داده هارو از دیتابیس استخراج کنیم و بعد عملیات روشون انجام بدیم. به دلیل اینکه امکان داره استخراج زمان زیادی ببره و وقتی که هنوز استخراج تمام نشده ، قسمت پردازش اجرا بشه و خطا بده.
سلام از 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()
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟