Здравствуйте, я хочу сделать запрос в запросе. Сначала делаю запрос, получаю от сервера данные, в них имеется адрес в формате долгота/широта, мне нужно из координат получить нормальный адрес. Для этого после получения данных из первого запроса(массив из ~100 объектов) я запускаю метод forEach и делаю запрос на geocode-maps.yandex.ru
export const getProducts = () => async dispatch => {
dispatch({
type: GET_PRODUCTS_REQUEST
});
try {
await fetch(API_SERVER_PRODUCTS)
.then(response => {
if (response.ok) {
return response.json()
.then(products => {
return products
})
.then(async products => {
const addressArray = [];
products.data.forEach(item => {
let lngLatUrl = YANDEX_GEOCODE + 'E' + item.address.lng + ',N' + item.address.lat;
try {
fetch(lngLatUrl)
.then(r => {
if (r.ok) {
return r.json()
.then(async address => {
addressArray.push(address.response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.text);
})
} else {
throw new Error('Network response was not ok.(2)');
}
})
} catch (err) {
console.log('some error with address: ' + err)
}
});
await dispatch({
type: GET_PRODUCTS_SUCCESS,
payload: products.data,
newAddress: addressArray
})
})
} else {
throw new Error('Network response was not ok.');
}
});
} catch (err) {
dispatch({
type: GET_PRODUCTS_FAILURE,
error: true,
errorMassage: err
})
}
};
Не могу понять, что у меня с адресами получается.
Возможно я не правильно записываю эти строки с адресами в массив... Потому, что я получаю адреса с яндекса, пушу их в массив пустой - если вывести его в консоль, то он заполненный, но его длина равна 0, не понимаю как это возможно.
В консоле logger
показывает, что у меня есть массив с адресами, в консоле вижу, что там 100 строк, но если пишу nameArr.length
, то получаю 0
и никак не могу обратиться к элементам по индексу. В redux-devtools-extension
вообще показывает, что массив приходит пустой.
Мне кажется, что нужно использовать async/await. Но понять не могу как. И вообще не слишком ли мудреный запрос получается? Может можно сделать как-то элегантнее?
Помогите, пожалуйста, мучаюсь уже второй день, думал простая задачка...
UPDATE Пришел к такому решению.. Надеюсь оно верное
fetch(lngLatUrl)
.then(r => {
if (r.ok) {
return r.json()
.then(async address => {
newProducts[i].addressString = address.response.GeoObjectCollection.featureMember[0].GeoObject.metaDataProperty.GeocoderMetaData.text;
if (arr.length === i + 1) {
dispatch({
type: GET_PRODUCTS_SUCCESS,
payload: newProducts
})
}
});
} else {
throw new Error('Network response was not ok.(2)');
}
})
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Ребят подскажите, нужно при отправке данных, пока форма грузиться , отключить кнопку, инпут файл и изменить текст на кнопкеформа:
Подскажите как вывести таблицу в консольК примеру нужно вывести таблицу Пифагора
Имеется таблица в каждом столбце можно производить поиск по колонкеКак это сделать в laravel 5, используя paginator? На мой я придумал велосипед