تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ amirhossein khandestani
در مورد .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));
بهترین پاسخ
محسن موحد ۱۸ خرداد ۱۴۰۳، ۲۲:۴۵