💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ شریعتی
awaitچیه دقیق؟
محسن موحد حل شده توسط محسن موحد

الان دقیقا چه کاربردی داشتawait چرا رو خوانی کردین از روش که نفهمیم چیه؟؟؟؟

توضیح بدین چه کاربردی داره الان چه فرقی داره بود و نبودش

توی این کد چه فرقی کرد بودنش؟؟؟:         function test() {

        alert('...test...');

    }

    function test3() {

        alert('...test3...');

    }

    async function f(){

        let promise = new Promise((resolve , reject) =>{

            resolve('done');

           

           

           

        });

        let result = await promise;

        alert(result)

    }

    f();

    test();

    test3();

سلام،

await در جاواسکریپت یک کلمه کلیدی است که در کنار async استفاده می‌شود. هدف اصلی await این است که به ما امکان می‌دهد تا اجرای یک تابع آسنکرون را به طور موقت متوقف کنیم تا زمانی که یک عملیات آسنکرون (معمولاً یک Promise) به پایان برسد.

در مثال شما:

async function f(){
   let promise = new Promise((resolve , reject) =>{
       resolve('done');
   });
   let result = await promise;
   alert(result)
}
f();
test();
test3();

اجرای این کد به شرح زیر است:

تابع f() تعریف می‌شود که یک تابع async است.
درون f()، یک Promise ایجاد می‌شود که بلافاصله با مقدار 'done' ریزالو می‌شود.
سپس، await promise اجرا می‌شود. این بدین معنی است که اجرای تابع f() متوقف می‌شود تا زمانی که Promise ریزالو شود.
وقتی Promise ریزالو شد، مقدار آن در متغیر result ذخیره می‌شود و سپس alert(result) اجرا می‌شود.
پس از آن، دو تابع test() و test3() به ترتیب اجرا می‌شوند.

 

اجرای این کد به شرح زیر است:

1. تابع f() تعریف می‌شود که یک تابع آسنکرون است.
2. درون f()، یک Promise ایجاد می‌شود که بلافاصله با مقدار 'done' ریزالو می‌شود.
3. سپس، await promise اجرا می‌شود. این بدین معنی است که اجرای تابع f() متوقف می‌شود تا زمانی که Promise ریزالو شود.
4. وقتی Promise ریزالو شد، مقدار آن در متغیر result ذخیره می‌شود و سپس alert(result) اجرا می‌شود.
5. پس از آن، دو تابع test() و test3() به ترتیب اجرا می‌شوند.
 

اما اگر await در این کد وجود نداشت، نتیجه به این صورت می‌بود:

async function f(){
   let promise = new Promise((resolve , reject) =>{
       resolve('done');
   });
   // بدون await
   let result = promise;
   alert(result) // اینجا result یک Promise است
}
f();
test();
test3();

در این صورت، چون await وجود ندارد، result یک Promise خواهد بود و alert(result) در واقع Promise را نمایش می‌دهد، نه مقدار ریزالو شده آن.

 

در کل، await به ما این امکان را می‌دهد که به روش همزمان (synchronous) با اجرای Promise برخورد کنیم و منتظر پایان شدن آن باشیم. این معمولاً باعث می‌شود که کد خوانا‌تر و آسان‌تر قابل درک شود.
 

بهترین پاسخ
محسن موحد ۱۸ فروردین ۱۴۰۳، ۰۰:۳۴

اما من سوالم این بود که چرا الان طبق گفته شما اول تابغf اجرا نمیشه؟؟ آخر اجرا میشه بعد دوتا تابع دیگه؟؟؟

شریعتی ۱۸ فروردین ۱۴۰۳، ۱۷:۲۰