درود
زمانی که ما بخوایم یک مقداری رو داخل تابع resolve برای promise یا async استفاده کنیم باید چکار کنیم؟
منظور اینکه بعد از انجام شدن کد داخل پرامیس، یک مقدار که نیاز داریم رو داخل تابع then استفاده کنیم.
سلام،نمیدونم دقیقا منظورتو درست متوجه شدم یا نه منتهی چنتا مثال میارم واسه روشنتر کردن موضوع.
مثال 1: استفاده از then با یک Promise
فرض کن یه تابع داریم که یه پرامیس برمیگردونه که بعد از 2 ثانیه تکمیل میشه و یه مقدار عددی برمیگردونه:
function getNumber() { return new Promise((resolve) => { setTimeout(() => { resolve(42); }, 2000); }); } getNumber().then((result) => { console.log('عدد دریافت شده:', result); // عدد دریافت شده: 42 });
اینجا getNumber یه پرامیس برمیگردونه و بعد از 2 ثانیه عدد 42 رو به تابع then ارسال میکنه. ما میتونیم این عدد رو داخل then استفاده کنیم و چاپش کنیم.
مثال 2: استفاده از async/await
اگر بخوای از async/await استفاده کنی که خوندنش راحتتره، میتونی به این صورت بنویسی:
async function getNumber() { return new Promise((resolve) => { setTimeout(() => { resolve(42); }, 2000); }); } async function printNumber() { const result = await getNumber(); console.log('عدد دریافت شده:', result); // عدد دریافت شده: 42 } printNumber();
اینجا از await استفاده کردیم تا صبر کنیم پرامیس تکمیل بشه و بعد مقدار result رو به دست بیاریم و چاپش کنیم.
مثال 3: استفاده از نتیجه چند پرامیس با then
فرض کن دو تا پرامیس داریم که میخوایم نتایجشون رو بعد از تکمیل شدن استفاده کنیم:
function getNumber1() { return new Promise((resolve) => { setTimeout(() => { resolve(10); }, 1000); }); } function getNumber2() { return new Promise((resolve) => { setTimeout(() => { resolve(20); }, 2000); }); } getNumber1().then((result1) => { console.log('عدد اول:', result1); // عدد اول: 10 return getNumber2(); }).then((result2) => { console.log('عدد دوم:', result2); // عدد دوم: 20 });
اینجا بعد از تکمیل شدن getNumber1، از نتیجش استفاده کردیم و بعد پرامیس getNumber2 رو صدا زدیم. بعد از تکمیل شدن getNumber2 هم نتیجش رو چاپ کردیم.
خب الان این متغیر result کجا تعریف شده؟
داخل توابع رو ببین، هر بار یک پرامیس return میشه. مقدار result از خروجی return گرفته میشه و تا زمانیکه resolve نشه then اجرا نمیشه.