Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.02.2022, 13:21
Аватар для ANAGAMA
Аспирант
Отправить личное сообщение для ANAGAMA Посмотреть профиль Найти все сообщения от ANAGAMA
 
Регистрация: 29.05.2013
Сообщений: 49

Промисы, один 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)
	})

Последний раз редактировалось ANAGAMA, 05.02.2022 в 13:37.
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2022, 14:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

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

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

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

Последний раз редактировалось Aetae, 05.02.2022 в 14:31.
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2022, 14:42
Аватар для ANAGAMA
Аспирант
Отправить личное сообщение для ANAGAMA Посмотреть профиль Найти все сообщения от ANAGAMA
 
Регистрация: 29.05.2013
Сообщений: 49

Сообщение от Aetae Посмотреть сообщение
Какую иную логику ты хочешь тут увидеть?
.
Мерси. Задача простая. Как сделать один catch на всех.

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

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

Вот такая хрень.
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2022, 15:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

ANAGAMA, ну и делай один catch в самом конце. Всё что посерёдке после возникновения ошибки - будет пропущено. Если конечно там свой catch не затешится.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2022, 15:05
Аватар для ANAGAMA
Аспирант
Отправить личное сообщение для ANAGAMA Посмотреть профиль Найти все сообщения от ANAGAMA
 
Регистрация: 29.05.2013
Сообщений: 49

Сообщение от Aetae Посмотреть сообщение
ANAGAMA, ну и делай один catch в самом конце. Всё что посерёдке после возникновения ошибки - будет пропущено. Если конечно там свой catch не затешится.
Была идея сделать один объект обращения к серверу, что бы он фильтровал всё и сетевые ошибки и апишные....
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2022, 15:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

И? Проблема то в чём?
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 05.02.2022, 16:41
Аватар для ANAGAMA
Аспирант
Отправить личное сообщение для ANAGAMA Посмотреть профиль Найти все сообщения от ANAGAMA
 
Регистрация: 29.05.2013
Сообщений: 49

Сообщение от Aetae Посмотреть сообщение
И? Проблема то в чём?
Спасибо! Поговорил с умным человеком и проблема решена.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как один из бутстрап navbar-ов заставить схлопываться раньше? borus jQuery 0 19.05.2015 11:40
PopUp как выполнить код один раз для сессии kznsky Events/DOM/Window 5 03.03.2015 13:48
перевод в число или как прибавить один anton_vek Общие вопросы Javascript 3 26.08.2010 13:07
try и catch подскажите как правильно сделать Jekel Javascript под браузер 9 31.03.2010 10:33
как реализовать задачу? (автокомплит и много инпутов из под дома) h-zone jQuery 1 06.11.2009 20:09