بازگشت به درس

Promise: then علیه catch

آیا این قطعه‌های کد یکی هستند؟ به عبارتی دیگر، آیا آن‌ها در هر شرایطی و به ازای هر تابع مدیریت‌کننده‌ای یکسان رفتار می‌کنند؟

promise.then(f1).catch(f2);

علیه:

promise.then(f1, f2);

پاسخ کوتاه: خیر آن‌ها یکی نیستند:

تفاوت این است که اگر اروری در f1 رخ دهد، سپس اینجا توسط .catch مدیریت می‌شود:

promise
  .then(f1)
  .catch(f2);

…اما اینجا نه:

promise
  .then(f1, f2);

به این دلیل که یک ارور به پایین زنجیره پاس داده می‌شود و در قطعه کد دوم پایین f1 زنجیری وجود ندارد.

به عبارتی دیگر، .then نتایج/ارورها را به .then/catch بعدی پاس می‌دهد. پس در مثال اول، یک catch در پایین زنجیره وجود دارد و در مثال دوم وجود ندارد پس ارور مدیریت نشده باقی می‌ماند.