catch и then
Уважаемые господа! вот опять вопрос, может быть кто подскажет....
есть такой участок кода: this.readServerInfo( options ) .catch( function( errorMessage ){ .... }) .then( function( result ){ ..... }) в функции readServerInfo генерируется ошибка: throw new Error( error ); срабатывает catch как и положено. Но! потом срабатывает и then! и только в этом месте, в других участках кода с подобной конструкцией все правильно. Причем, если поменять местами : this.readServerInfo( options ) .then( function( result ){ ..... }) .catch( function( errorMessage ){ .... }) то then уже не срабатывает. Так и должно быть? |
Цитата:
Вот пример let promise = new Promise(function(resolve, reject) { setTimeout(() => reject(new Error("Whoops!")), 1000); }); promise.then( result => alert(result), // не будет запущена error => alert(error + ' из then') // выведет "Error: Whoops!" спустя одну секунду ); promise.catch(err => alert(err + ' из catch')) Сколько их местами не меняй - выполнятся "оба". Точнее выполнится вторая функция из then, ну и конечно функция из catch. Т.е. так, как написано в букваре https://learn.javascript.ru/promise-...-catch-finally Цитата:
|
Цитата:
|
Цитата:
|
с конструкцией
promise.then( result => alert(result), // не будет запущена error => alert(error + ' из then') // выведет "Error: Whoops!" спустя одну ); все понятно, речь о конструкции promise.then().catch() вот в таком вариант сработает только catch а вот в таком promise.catch().then() сначала catch() потом then() интуитивно типа понятно - но нифига ладно бы сначала then, потом catch, а так непонятно |
Цитата:
Если в then передавали 2 функции - при ошибке будет вызываться вторая. Ну и catch вызовется тоже. Последовательность вызовов определяет прогер promise.catch().then() // или promise.then().catch() |
fxobject, если все еще есть непонятки - начинай делать свой тестовый пример...
На нем все и будет ясно. |
Если убрать вторую функцию из then
let promise = new Promise(function(resolve, reject) { setTimeout(() => reject(new Error("Whoops!")), 1000); }); promise.then( result => alert(result) // не будет запущена ); promise.catch(err => alert(err + ' из catch')) Как не меняй местами... При ошибке будет выполняться только catch. |
then в цепочке после cacth сработает всегда, получив на вход в первую функцию то, что вернул catch, или получив во вторую функцию ошибку которую бросит catch.
|
просто какой то звиздец. Уважаемый ksa, я понимаю вашу мудрость, но ваш пример совсем не под вопрос:
разбираем ваш пример. 1 созданый промис генерирует ошибку. - согласен 2 дважды организован вызов промиса. один с then и внутри как обработчик состояния success так и обработчик ошибки (к чему этот пример? я спрашивал совсем другое). В данном вызове конечно отработает только обработчик ошибки - тут вопросов нет 3 следующий вызов. А он только с catch. А он извиняюсь зачем? Вы совсем не читаете вопрос? В этом вызове также отработает код обработки ошибки. Ну и где тут ответ на вопрос? Внимание следим за руками - я спрашивал promise.then().catch() Вы не видите разницу с вашим примером? вот в такой комбинации promise.catch().then() отработает код в catch и в then. В принципе я разобрался почему так, но блин совсем не потой фигне вашего примера. на самом деле ответ заключается в том что promise.catch() возврашает промис у которого then в proto и наоборот promise.then() возврашает промис у которого catch() также в прото. заходим отладчиком и смотрим почему. И прекратите вашу брудершафтную тыкалку. О великий Рудиги |
Часовой пояс GMT +3, время: 09:28. |