Как вернуть значение при построении цепочки после зацикливания массива внутри обещания и передать его следующему обещанию в качестве аргумента? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь получить данные с конечной точки.Тем не менее, все работает отлично, за исключением крошечной ошибки, которую, я полагаю, я совершаю, что я не очень хорошо знаю об этой конкретной структуре.

Я использую forEach () внутри .then (), и теперь я хочу передатьВозвращает значение для forEach для следующего связанного обещания .then () И не создает новый .then () внутри другого .then ()

const url = 'https://jsonplaceholder.typicode.com/users';
/*r = response, v = value, e = error, n = names array, iv = item value */

axios.get(url)
.then( r => r )
.then( r => r.data )
.then( r => r.map( v => v ) )
.then( r => {const n = r; return n} )
.then( n => { n.forEach( v => v) } )
.then( /* HERE I WANT TO IMPLEMENT THE RETURNED VALUE FROM THE PREVIOUS FOREACH() FUNCTION*/ )
.catch( e => e.respose ? console.log(e.response.status) : console.log(e.message) )

ОБНОВЛЕНИЕ КОДА

axios.get(url)
.then( response => response.data )

/* Creates a copy from the responded array */
.then( 
  response => {
   const new_array = response.map( value => value )
   return new_array;
  } 
)

/* 
  Gets the name property for each value inside the copied array and stores it into a new array called names_array 
 */
.then(
  new_array => {
    const names_array = [];
    new_array.forEach(
      item => names_array.push(item.name)
    )
    return names_array
  }
)
.then(
  names => {
    console.log(names.sort( (a, b) => b-a) )

  }
)

/* Error handling */
.catch( e => e.respose ? console.log(e.response.status) : console.log(e.message) )

1 Ответ

0 голосов
/ 27 октября 2018

Если все, что вам нужно, это массив имен из объектов ответа, то вы слишком усложняете все это с помощью then() в цепочке.

Создание const new_array = response.map( value => value ) - это бессмысленный шаг, который просто делает копию исходного массива без всякой причины

Все, что вам нужно, это простой map(), чтобы вернуть имена в первом then()

const url = 'https://jsonplaceholder.typicode.com/users';

const getNames = () => axios.get(url)
  .then(res => res.data.map(o => o.name).sort((a, b) => a.localeCompare(b)))

getNames().then(sortedNames => console.log(sortedNames))
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...