Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 27.07.2021, 22:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от fxobject
Внимание следим за руками - я спрашивал
promise.then().catch()
Вы не видите разницу с вашим примером?
Я вообще твоего примера не вижу... Пока только есть некий рассказ и возмущения.

Делай работающий пример на котором ты имеешь некие особенности.
Ответить с цитированием
  #12 (permalink)  
Старый 27.07.2021, 22:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от fxobject
на самом деле ответ заключается в том что
promise.catch() возврашает промис у которого then в proto
и наоборот
promise.then() возврашает промис у которого catch() также в прото.
А я про это знал?
Ты про это где-то писал?
Ответить с цитированием
  #13 (permalink)  
Старый 27.07.2021, 22:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от fxobject
И прекратите вашу брудершафтную тыкалку.
Это не деловая переписка. Это свободный форум...
Ответить с цитированием
  #14 (permalink)  
Старый 27.07.2021, 22:47
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

уважаемый ksa - я не хочу чтобы вы мне отвечали, не хочу читать ваши опусы и демонстрацию ваших сверх знаний. Прошу вас - не отвечайте больше на мои темы!
по вышеупомянутому вопросу:
вот пример с результатом:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("Whoops!")), 1000);
});
let result = await promise.
catch(function(error){ return 1; }).
then( function(result){ return 2; });
отработают и catch и then
на выходе будет result = 2
порядок имеет значение
Ответить с цитированием
  #15 (permalink)  
Старый 27.07.2021, 22:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от fxobject
вот пример с результатом:
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("Whoops!")), 1000);
});
let result = await promise.
catch(function(error){ return 1; }).
then( function(result){ return 2; });
отработают и catch и then
на выходе будет result = 2
порядок имеет значение
Нет желания отвечать - не отвечай, дело хозяйское...

Но я решил потестить твой чудо-пример
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("Whoops!")), 1000);
});
let result = await promise.
catch(function(error){ alert('catch'); return 1; }).
then( function(result){ alert('then'); return 2; });

Так он дает ошибку
Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules

Т.ч. с работающими примерами у тебя пока туган.
Ответить с цитированием
  #16 (permalink)  
Старый 27.07.2021, 22:59
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

туган у тебя. обернуть пример в функцию async и вызвать ее для тебя непосильная задача на сообразительность. Общаться абстрактными категориями, смыслами для тебя не вариант. Тупо следовать написанному и ни шага в сторону - вот твой удел.
Ответить с цитированием
  #17 (permalink)  
Старый 27.07.2021, 23:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

fxobject, ты почаще в зеркало смотри...
Похоже ты свой портрет нарисовал.
Ответить с цитированием
  #18 (permalink)  
Старый 27.07.2021, 23:07
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

ну и хера ты лез отвечать? доминантность свою некуда деть? Мастер класс показать? Ты тут похоже первый парень на деревне? Какой смысл всех этих чатов, когда обязательно найдется умник, диалог с которым всегда перерастет в перепалку? И ведь не отстанет же подлец.
Знает же крысеныш что я прав, но будет до последнего хамить. Короче - идите батенька в сад. к черту вас
Ответить с цитированием
  #19 (permalink)  
Старый 28.07.2021, 09:56
Аватар для fxobject
Кандидат Javascript-наук
Отправить личное сообщение для fxobject Посмотреть профиль Найти все сообщения от fxobject
 
Регистрация: 01.03.2021
Сообщений: 138

Разобрался с поставленным вопросом, может кому нибудь будет полезно, поэтому сам отвечу на свой вопрос. Итак постановка задачи:
let promise1 = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("Whoops!")), 1000);});
let result = promise1.catch(function(error){ alert('catch'); }).
then( function(result){ alert('then');});
в результате выполнения (т.е. при возникновении ошибки в promise1) будет вывод catch и then. Т.е. выполнится и код с catch и код с then.
Для ответа почему так происходит запишем вышеописанный код в альтернативном виде:
let promise1 = new Promise.... тут new Error
let promise2 = promise1.catch(function(error){ alert('catch'); });
let promise3 = promise2.then( function(result){ alert('then');});
это полностью эквивалентно ранее написанному коду. причем promise2 и promise3 потому что Promise.catch и Promise.then возвращает объект Promise.
И самое важное в данном случае- они разные. Т.е. catch().then() и т.д. в цепочке создает цепочку промисов и они разные!!!
Т.е. promise1 promise2 promise3 - это три промиса и они РАЗНЫЕ.
Теперь давайте представим, что при выполнении promise1 возникла ошибка. Сразу срабатывает promise1.catch. Находясь в promise1.catch
promise1 имеет статус resolved
promise2 имеет статус pending
promise3 имеет статус pending
как только заканчивается promise1.catch заканчивается и выполнение promise2. При этом статус promise2 становится resolved и выполнение его считается завершенным БЕЗ ОШИБОК.
затем идет следующая строка кода:
promise2.then( function(result){ alert('then');});
но promise2 завершился без ошибок!!! значит у него отработает then. Что мы и наблюдаем
Т.е. получается важен порядок. Вот в такой конфигурации
promise.catch().then( );
then будет отрабатываться ВСЕГДА. независимо от того, что произошло в promise.
Поэтому всегда необходимо ставить:
then().catch( )
Надеюсь кому нибудь будет полезно в понимании, спасибо
Ответить с цитированием
  #20 (permalink)  
Старый 28.07.2021, 12:42
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от fxobject
Вот в такой конфигурации
promise.catch().then( );
then будет отрабатываться ВСЕГДА.
только если в колбэке в catch не случилась ошибка
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разве try catch в dev библиотеках не затрудняет разработку? Megabyte Общие вопросы Javascript 10 12.07.2021 02:03
Что записать в блок catch (err)? antonhauff Events/DOM/Window 10 20.02.2018 13:10
Баг Aurora promise catch Octane Оффтопик 2 28.03.2014 01:37
Не срабатывает try...catch kazimira6 Общие вопросы Javascript 4 22.07.2011 13:49
try и catch подскажите как правильно сделать Jekel Javascript под браузер 9 31.03.2010 10:33