🔥 با کمک هوش مصنوعی در کمتر از 6 ماه فول‌استک شوید ...
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ نازبو ترکاشوند
در مورد .then
استاد ماندیس بحرینی حل شده توسط استاد ماندیس بحرینی

سلام خسته نباشید

 

در پرامیس‌ها استاد توضیح دادند که اگر میخواهید چند عمل بعد از پرامیس به ترتیب انجام شوند ، طوری که هر کدام بعد از دیگری اجرا شوند از .then پشت سر هم استفاده کنیم؛

 

پس چرا برای مثل در کد زیر عدد 7 صبر نمیکند تا کد قبل که عدد 6 هست اول در کنسول چاپ شود، سپس عدد 7 چاپ شود؟(مگر هدف همین نبود که حتی کدهای async نیز به ترتیب دلخواه اجرا شوند؟)

 

'use strict';
        console.log(1);
        console.log(2);
        let myPromise = new Promise((resolve, reject) => {
            setTimeout(() => {
                console.log(3);
                resolve();
            }, 3000);
        })
        .then(result => console.log(4) , error => alert('ooooops'))
        .then(result => console.log(5))
        .then(result => setTimeout(() => {
            console.log(6)
        }, 3000))
        .then(result => console.log(7));

سلام،

در مثالی که نوشتید دستور settimeout اجرا شده و رفته then اخر اجرا شده.

حالا اینکه settimeout چه زمانی اجرا بشه ارتباطی با بقیه دستورات نداره. خود این دستور بصورت async اجرا میشه.

برای حل این مشکل میتونی یک پرامیس جدید معرفی کنی تا بعد از resolve شدن settimeout سپس بقیه اجرا شوند:

console.log(1);
console.log(2);
let myPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
        console.log(3);
        resolve();
    }, 3000);
})
.then(result => console.log(4), error => alert('ooooops'))
.then(result => console.log(5))
.then(result => new Promise((resolve) => {
    setTimeout(() => {
        console.log(6);
        resolve();
    }, 3000);
}))
.then(result => console.log(7));
بهترین پاسخ
استاد ماندیس بحرینی ۱۸ خرداد ۱۴۰۳، ۲۲:۴۵