Промисы, один 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) }) |
В смысле? Ты кидаешь новую ошибку из первого catch. Ошибка должна быть поймана или всплывёт.
Какую иную логику ты хочешь тут увидеть? Нельзя взять и прервать цепочку then без причины. Если это было возможно - это привело бы ужасным неотслеживаемым багам. Любой нормальный программист ожидает, что его then будет выполнен или получит ошибку, объясняющую почему нет, независимо от источника откуда прилетел Promise. P.S. Есть одна "возможнось" которую никогда нельзя использовать и за которую будут бить ногами - кинуть в ответ вечный Promise, который никогда не исполнится, типа new Promise(()=>{}), вот только это повесит в памяти всю цепочку, т.е. memory leak. |
Цитата:
Например, запросы к сереверу. Один завалился — остальные бессмысленны. Причем завалился он не потому,что была ошибка запроса, а ответ пришел такой, что все остальные запросы потеряли смысл. Вот такая хрень. |
ANAGAMA, ну и делай один catch в самом конце. Всё что посерёдке после возникновения ошибки - будет пропущено. Если конечно там свой catch не затешится.
|
Цитата:
|
И? Проблема то в чём?
|
Цитата:
|
Часовой пояс GMT +3, время: 11:52. |