Я проверил ответ elraphty, потому что он отвечает на часть моего вопроса, и он также хотел, чтобы я проверил его ответ.В любом случае, если у вас возникли проблемы выборки данных и ожидание завершения выборки , вот полный пример того, как я это делаю.Комментарий Предрага Беоканина работает:
fetch('some_url', { method: 'GET' }).then(res = res.json()).then(data => { // some parse here; return parsed}
Вот как я это делаю (используя axios вместо metch, отправляя запрос в другой файл / api / roadmap, а затем используя Redux для обновления магазина.
В OneRoadmap.js, который является компонентом, в который мне нужно извлекать данные, это то, что я вызываю для извлечения данных:
async componentDidMount() {
await this.props.getRoadmaps();
.....
}
Это позволяет нам запускать this.props.getRoadmaps() и дождитесь завершения строки перед переходом к следующей строке. Если вы не укажете async / await, сработает this.props.getRoadmaps (), но код в componentDidMount () немедленно продолжит работу без this.props.getRoadmaps () завершает выборку данных и затем обновляет состояние. Теперь, конечно, ответ Predrag определенно должен решить эту проблему, но на тот случай, если вы хотите поместить выборку данных и обновление состояния с помощью redux в разных файлах (как я), продолжайте читать .
Это то, что делает getRoadmaps (), в файле с именем RoadmapActions.js:
export const getRoadmaps = () => dispatch => {
dispatch(setRoadmapsLoading());
return axios
.get("/api/roadmaps")
.then(res => dispatch({ type: GET_ROADMAPS, payload: res.data }));
};
Это говорит о том, что мы отправим запрос на получение в "/ api / roadmaps", затем возьмем данные возврата из запроса на получение, а затем отправим отправку в хранилище с избыточностью, которое обновит состояние хранилища, и мыв конечном итоге использовать его в OneRoadmap.js.Вот что возвращает запрос / api / roadmaps:
router.get("/", (req, res) => {
Roadmap.find()
.sort({ date: -1 })
.then(roadmaps => res.json(roadmaps));
});
Roadmap.find () заходит в нашу базу данных mongo и получает все элементы дорожной карты, а затем мы возвращаем ее туда, откуда она была вызвана.
С этими возвращенными данными мы отправляем отправку редуктору с этими данными, это то, что делает GET_ROADMAPS (), GET_ROADMAPS находит в roadmapReducer.js:
const initialState = {
roadmaps: [],
loading: false,
current_roadmap: ""
};
export default function(state = initialState, action) {
switch (action.type) {
case GET_ROADMAPS:
return {
...state,
roadmaps: action.payload,
loading: false
};
}
Тогда вот и все, ваше состояние хранилища резервов обновляется, и, поскольку я подключил OneRoadmap.js к state.roadmap, я могу свободно использовать его в коде.