Promise.race: بهترین روش برای اجرای محدودیت زمانی در Promises. ⏳

هر زمان که یک درخواست Promise اتفاق بیفتد، معمول است که یک تایم اوت داشته باشد. اگر از محدودیت زمانی تجاوز شود، درخواست را لغو میکند و خطای مهلت زمانی ایجاد میکند.
چگونه آن بازگشت را پیاده سازی می کنید؟ استفاده می کنید setTimeout
? یا در بدترین حالت از آن استفاده می کنید performance.now
برای محاسبه اینکه آیا درخواست از محدودیت زمانی فراتر رفته است؟
اینجاست که Promise.race
طبق MDN:
این
Promise.race()
روش static یک تکرار از وعده ها را به عنوان ورودی می گیرد و یک تک را برمی گرداندPromise
.
همانطور که از نام آن پیداست، تکرارپذیر (مانند آرایه) of را فعال می کند Promise
اشیاء، و هر کدام سریعتر حل شود، برگردانده می شود.
بنابراین، با استفاده از Promise.race
، می توانید با حداقل کد یک محدودیت زمانی را پیاده سازی کنید.
// Where fn is the promise, and
// ms is the time limit in milliseconds
function timeLimit(fn, ms) {
const fallback = new Promise((_, reject) => {
setTimeout(() => {
reject("Time limit exceeded");
}, ms);
});
return Promise.race([fn, fallback]);
}
این تابع به طور همزمان اجرا می کند fn
استدلال و fallback
وعده. این fallback
وعده ایجاد مهلت با ms
به عنوان زمان تاخیر لذا بعد از زمان تأخیر قول را رد می کند.
از آنجا که Promise.race
اولین وعده را برای اتمام باز می گرداند، "Time limit exceeded"
رد را می توان برگرداند اگر fn
قولش دیره
برعکس، اگر fn
زودتر تمام شود، نتیجه خود را، چه حل شده یا رد شده، برمی گرداند.
خودشه. با تشکر از شما برای خواندن! آیا می خواهید به این پست واکنش نشان دهید؟