Цитата:
Делай работающий пример на котором ты имеешь некие особенности. |
Цитата:
Ты про это где-то писал? |
Цитата:
|
уважаемый 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 порядок имеет значение |
Цитата:
Но я решил потестить твой чудо-пример 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 Т.ч. с работающими примерами у тебя пока туган. :( |
туган у тебя. обернуть пример в функцию async и вызвать ее для тебя непосильная задача на сообразительность. Общаться абстрактными категориями, смыслами для тебя не вариант. Тупо следовать написанному и ни шага в сторону - вот твой удел.
|
fxobject, ты почаще в зеркало смотри... :D
Похоже ты свой портрет нарисовал. |
ну и хера ты лез отвечать? доминантность свою некуда деть? Мастер класс показать? Ты тут похоже первый парень на деревне? Какой смысл всех этих чатов, когда обязательно найдется умник, диалог с которым всегда перерастет в перепалку? И ведь не отстанет же подлец.
Знает же крысеныш что я прав, но будет до последнего хамить. Короче - идите батенька в сад. к черту вас |
Разобрался с поставленным вопросом, может кому нибудь будет полезно, поэтому сам отвечу на свой вопрос. Итак постановка задачи:
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( ) Надеюсь кому нибудь будет полезно в понимании, спасибо |
Цитата:
|
Часовой пояс GMT +3, время: 11:50. |