Я пытаюсь извлечь данные из конечной точки. Тем не менее, все работает отлично, за исключением крошечной ошибки, я полагаю, что я делаю то, что я не очень хорошо знаю об этой конкретной структуре.
Я использую 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) )
Если все, что вы хотите, представляет собой массив имен из объектов ответа, вы чрезмерное сокрушаете все это с помощью бесполезных 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>
map()
возвращает новый массив, так что вы не влияете на оригинал
forEach()
ничего не возвращает (возвращаетundefined
)? Вот почему вы не должны использовать его, кстати..then( r => r )
,.then( r => r.map( v => v ) )
ни.then( r => {const n = r; return n} )
имеют смысла.