صفحه اصلی >> بلاگ >> نحوه نوشتن promise ها در JavaScript

نحوه نوشتن promise ها در JavaScript

دسته:جاوااسکریپت تاریخ انتشار: 3 فوریه 2021 ایمان رضایی

تقریباً هرکسی که از جاوا اسکریپت استفاده کرده باشد ، در برخی موارد رابطه عشق / نفرت با آن داشته است. جاوا اسکریپت مانند آن دوست دختری است که گاهی ناامید کننده است اما چیزی در مورد او دارد که ما را شیفته خود می کند. جاوا اسکریپت دارای تعداد زیادی از موضوعات و مفاهیم جالب برای کاوش است. بیایید با یکی از آنها شروع کنیم - Promises.

دقیقاً مانند هیچ فیلم مرد عنکبوتی بدون گفتگو کامل نیست

هیچ مقاله ای مبتنی بر Promise بدون بیان اینکه Promises شما را از جهنم پاسخگویی نجات می دهد کامل نیست.

اما Promise های بیشتری وجود دارد و من این را به شما نشان خواهم داد.

جاوا اسکریپت یک زبان برنامه نویسی همزمان(synchronous) است ، اما به دلیل callback functions می توانیم آن را مانند یک زبان برنامه نویسی ناهمزمان(Asynchronous) کار کنیم.

Promises

Promise های موجود در جاوا اسکریپت بسیار شبیه وعده های داده شده در زندگی واقعی است.

  1. پس از ایجاد Promise ، در مورد "چیزی" اطمینان حاصل می کنیم و می توانیم بر اساس آن برنامه ریزی کنیم.
  2. می توان آنها را نگه داشت یا شکست.
  3. ما نمی توانیم بلافاصله به آنها عمل کنیم فقط پس از عمل به Promise

به گفته MDN:

شی Promise نمایانگر اتمام (یا شکست) نهایی یک عملیات ناهمزمان(Asynchronous) و مقدار حاصل از آن است.

بازی با Promise ها 2 قسمت دارد-

  1. ایجاد Promise ها
  2. رسیدگی به Promise ها

ایجاد

Promise ها طرح اصلی را دارند

new Promise( /* executor */ function(resolve, reject) { ... } );
--MDN

تابع اجرا (اجرا کننده) دو پارامتر را حل و رد می کند که به نوبه خود callback functions هستند. Promise ها برای رسیدگی به عملیات ناهمزمان که کد مسدود کننده نیز نامیده می شود ، استفاده می شوند ، نمونه هایی از آنها تماس های DB ، I / O یا API هستند که توسط عملکرد مجری انجام می شوند. پس از اتمام آن ، فراخوانی عزم در موفقیت است یا رد عملکرد در هنگام خطا.

یک مثال ساده

let promise = new Promise(function(resolve, reject) {if(promise_kept)
  resolve("done");else
  reject(new Error("…"));
 
});

همانطور که مشاهده می شود ، promise ها بلافاصله مقادیر را بر نمی گردانند. منتظر موفقیت یا شکست است و به همین ترتیب برمی گردد. این اجازه می دهد تا متد های ناهمزمان(asynchronous) مقادیری مانند مقادیر همزمان(synchronous) را برگردانند. به جای بازگرداندن مقادیر بلافاصله ، متدهای async نوید بازگشت مقدار را می دهند.

پاراگراف بالا یک چیز را روشن می کند ، Promise حالاتی دارد!

Promise می تواند یکی از این حالت ها باشد-

  1. در انتظار (pending) - این حالت یا حالت اولیه در هنگام اجرای Promise است. نه تحقق یافته و نه رد شده است.
  2. تحقق یافت (fulfilled) - Promise موفقیت آمیز بود.
  3. رد شد (rejected) - Promise ناموفق بود.
  4. حالت ها کاملاً خود گویا هستند ، بنابراین به جزئیات نمی پردازند. در اینجا یک تصویر از صفحه برای مرجع است.

مدیریت و استفاده از Promise

در بخش آخر نحوه ایجاد Promise ها را مشاهده کردیم ، اکنون بیایید ببینیم که چگونه می توان Promise ها را استفاده کرد.

 


const isDone = new Promise()
//...

const checkIfDone = () => {
isDone
.then(ok => {
console.log(ok)
})
.catch(err => {
console.error(error)
})
}

 

 

 

در حال اجرا ()checkIfDone. قول ()isDone. را اجرا می کند و منتظر حل آن با استفاده از callback است. در صورت وجود خطا در بلوک catch کنترل می شود.

Promise های زنجیره ای(Chaining)

می توان با ایجاد زنجیره ای از promise ها ، یک قول را به قول دیگری برگرداند. اگر یکی از همه افراد دیگر نیز شکست بخورد. زنجیره زدن همراه با Promise بسیار قدرتمند است زیرا به ما امکان کنترل ترتیب وقایع را در کد ما می دهد.

 

 

new Promise(function(resolve, reject) {

setTimeout(() => resolve(1), 1000);

}).then(function(result) {

alert(result);
return result * 3;

}).then(function(result) {

alert(result);
return result * 4;

}).then(function(result) {

alert(result);
return result * 6;

});

همه عملیات در آنجا بر می گردند و نتایج به تابع ()then بعدی برمی گردند و این روند تا کامل شدن زنجیره ادامه می یابد. آخرین عنصر در زنجیره نتیجه نهایی را برمی گرداند.

نتیجه

این فقط یک خلاصه اصلی از Promise های جاوا اسکریپت بود. Promise ها اگر به روش صحیح و در جای مناسب استفاده شوند ، کارهای بسیار بیشتری می توانند انجام دهند.

 

 

 

 

 

n0
n65

برای ثبت نظر باید وارد سایت شوید یا ثبت نام نمایید.


نظر شما با موفقیت در سیستم ثبت گردید.