Может кто-то пожалуйста, объясните, почему возвращения Аксиос обещают еще и сцепление, но, возвращаясь после применения, тогда()/поймать()` метод, не?
Пример:
в
const url = 'https://58f58f38c9deb71200ceece2.mockapi.io/Mapss'
function createRequest1() {
const request = axios.get(url)
request
.then(result => console.log('(1) Inside result:', result))
.catch(error => console.error('(1) Inside error:', error))
return request
}
function createRequest2() {
const request = axios.get(url)
return request
.then(result => console.log('(2) Inside result:', result))
.catch(error => console.error('(2) Inside error:', error))
}
createRequest1()
.then(result => console.log('(1) Outside result:', result))
.catch(error => console.error('(1) Outside error:', error))
createRequest2()
.then(result => console.log('(2) Outside result:', result))
.catch(error => console.error('(2) Outside error:', error))
<script src="https://unpkg.com/[email protected]/dist/axios.min.js"></script>
в
Я понимаю, что методы обещание должна возвращать значение, которое будет прикован, но в чем разница между этими двумя методами вернуть?
Ваш первый пример возвращает исходный посыл. Ваш второй пример возвращает разные обещаю, созданный путем вызова поймать
.
Критические различия между ними:
В вашем втором примере, вы'повторно не передавая значение разрешения, поэтому обещаем возвращаемые", затем "разрешить с" неопределенным " (возвращаемое значение из консоли.журнал`).
В вашем втором примере, вы'повторного преобразования отказов в разрешениях с "неопределенным" (с возвратом результата из консоли.журнализ
поймать). В
поймать` обработчик, который не'т выбросить или вернуть обещаю, что'отказала преобразует отказ в разрешении.
Одна из ключевых вещей о обещание цепи заключается в том, что они преобразуют результат; каждый вызов то
или поймать
создает новый посыл, и их обработчики могут изменить то, что's отправлено вниз по течению, в результате через них проходит.
Обычная картина действительно можно было бы вернуть результат услуги, но и для функции в цепи, чтобы намеренно превратить в результат или передать его на. Как правило, вы не'т иметь обработчик "уловить" только в терминале конце цепочки, если вы'повторно использовать его, чтобы исправить ошибку (намеренно конвертировании отказ в разрешении).
Если вы хотите просто войти то, что прошел через то же время позволяя абонентам видеть это, но сделал ** хочу вернуть результат в цепь по каким-то причинам, вы'd сделать это:
return request
.then(result => { console.log(result); return result; })
.catch(error => { console.error(error); return Promise.reject(error); });
или с помощью "броска":
return request
.then(result => { console.log(result); return result; })
.catch(error => { console.error(error); throw error; });