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
در پایین زنجیره وجود دارد و در مثال دوم وجود ندارد پس ارور مدیریت نشده باقی میماند.