Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Промисы, один Catch и много then, как прекратить следующие then? (https://javascript.ru/forum/misc/83653-promisy-odin-catch-i-mnogo-then-kak-prekratit-sleduyushhie-then.html)

ANAGAMA 05.02.2022 13:21

Промисы, один Catch и много then, как прекратить следующие then?
 
Привет. Сорри, читал, читал доку, раз 10. Вот такой простой код.
Проблема прямо в коде

Спасибо, друзья.


var p = new Promise((resolve, reject) => {
		reject("reject 1")
		resolve("resolve 1")
	})
	
	.then( data => {
		// не вызывается и не должно. Ок.
	})
	
	.catch(data => {
		console.log("catch 1 =", data);
		//
		// все ок
		// 
		return Promise.reject("Нах");
		// 
		// все ок
		//
		// Вопрос, можно ли избавиться от второго catch?
		//
		// если просто так его удалить,то возникает ошибка
		//  Uncaught (in promise)
		//
	})

	.then( data => {
		console.log("then 2 =", data)
	})

	.catch(data => {
		console.log("catch 2 =", data)
	})

Aetae 05.02.2022 14:21

В смысле? Ты кидаешь новую ошибку из первого catch. Ошибка должна быть поймана или всплывёт.
Какую иную логику ты хочешь тут увидеть?

Нельзя взять и прервать цепочку then без причины. Если это было возможно - это привело бы ужасным неотслеживаемым багам. Любой нормальный программист ожидает, что его then будет выполнен или получит ошибку, объясняющую почему нет, независимо от источника откуда прилетел Promise.

P.S. Есть одна "возможнось" которую никогда нельзя использовать и за которую будут бить ногами - кинуть в ответ вечный Promise, который никогда не исполнится, типа new Promise(()=>{}), вот только это повесит в памяти всю цепочку, т.е. memory leak.

ANAGAMA 05.02.2022 14:42

Цитата:

Сообщение от Aetae (Сообщение 543492)
Какую иную логику ты хочешь тут увидеть?
.

Мерси. Задача простая. Как сделать один catch на всех.

Например, запросы к сереверу.

Один завалился — остальные бессмысленны. Причем завалился он не потому,что была ошибка запроса, а ответ пришел такой, что все остальные запросы потеряли смысл.

Вот такая хрень.

Aetae 05.02.2022 15:02

ANAGAMA, ну и делай один catch в самом конце. Всё что посерёдке после возникновения ошибки - будет пропущено. Если конечно там свой catch не затешится.

ANAGAMA 05.02.2022 15:05

Цитата:

Сообщение от Aetae (Сообщение 543495)
ANAGAMA, ну и делай один catch в самом конце. Всё что посерёдке после возникновения ошибки - будет пропущено. Если конечно там свой catch не затешится.

Была идея сделать один объект обращения к серверу, что бы он фильтровал всё и сетевые ошибки и апишные....

Aetae 05.02.2022 15:06

И? Проблема то в чём?

ANAGAMA 05.02.2022 16:41

Цитата:

Сообщение от Aetae (Сообщение 543497)
И? Проблема то в чём?

Спасибо! Поговорил с умным человеком и проблема решена.


Часовой пояс GMT +3, время: 11:52.