javascriptPromisePromise در جاوااسکریپت
Promise در جاوااسکریپت چیست؟ وضعیتهای pending، fulfilled و rejected، ترتیب اجرای then و مدیریت خطا با catch را با مثال و خروجی بررسی کنید.
مفهوم به زبان ساده
Promise نتیجهای را نمایندگی میکند که ممکن است هنوز آماده نباشد. سه وضعیت دارد: pending، fulfilled و rejected. پس از موفقشدن یا ردشدن، وضعیت نهایی آن تغییر نمیکند.
با then به نتیجهٔ موفق واکنش میدهید و با catch ردشدن را مدیریت میکنید. Promise تضمین نمیکند کار موفق شود و بهتنهایی به معنی اجرای کار در یک نخ جداگانه نیست.
حتی وقتی Promise.resolve نتیجهٔ آماده میسازد، callbackِ then بعد از پایان کد همگام فعلی اجرا میشود. به همین دلیل در مثال، now زودتر از ready چاپ میشود. برای نوشتن ادامهٔ همین منطق با ساختاری خطیتر، #async-await را ببینید.
کجا به کار میآید؟
- دریافت نتیجهٔ درخواست شبکه و مدیریت خطای آن
- زنجیرهکردن کارهایی که هر کدام به نتیجهٔ قبلی وابستهاند
از تعریف تا یک مثال واقعی
const result = Promise.resolve("ready");
result.then(value => console.log(value));
console.log("now");
now ready
این مثال چطور کار میکند؟
Promise.resolve("ready") یک Promise موفق با مقدار ready میسازد.
then واکنش به نتیجه را ثبت میکند؛ callback فوراً اجرا نمیشود.
ابتدا now و سپس ready در کنسول دیده میشود.
اشتباه رایج
اگر داخل then کار ناهمگام دیگری آغاز میکنید و زنجیره به نتیجهٔ آن نیاز دارد، Promise آن کار را return کنید؛ وگرنه زنجیره منتظرش نمیماند.
این را به خاطر بسپارید
نتیجهٔ آینده را زنجیره کنید و مسیر خطا را هم مانند مسیر موفقیت در نظر بگیرید.