Возвращая Аксиос обещание от функции

Может кто-то пожалуйста, объясните, почему возвращения Аксиос обещают еще и сцепление, но, возвращаясь после применения, тогда()/поймать()` метод, не?

Пример:

в

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/axios@0.16.1/dist/axios.min.js"></script>

в

https://jsfiddle.net/nandastone/81zdvodv/1/

Я понимаю, что методы обещание должна возвращать значение, которое будет прикован, но в чем разница между этими двумя методами вернуть?

Комментарии к вопросу (3)
Решение

Ваш первый пример возвращает исходный посыл. Ваш второй пример возвращает разные обещаю, созданный путем вызова поймать.

Критические различия между ними:

  1. В вашем втором примере, вы'повторно не передавая значение разрешения, поэтому обещаем возвращаемые", затем "разрешить с" неопределенным " (возвращаемое значение из консоли.журнал`).

  2. В вашем втором примере, вы'повторного преобразования отказов в разрешениях с "неопределенным" (с возвратом результата из консоли.журнализпоймать). Впоймать` обработчик, который не'т выбросить или вернуть обещаю, что'отказала преобразует отказ в разрешении.

Одна из ключевых вещей о обещание цепи заключается в том, что они преобразуют результат; каждый вызов то или поймать создает новый посыл, и их обработчики могут изменить то, что'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; });
Комментарии (1)