Создатель действий не ждет - PullRequest
0 голосов
/ 03 февраля 2019

Я использую местозаполнитель json api в своем приложении для извлечения некоторых сообщений и их пользователей.Однако у пользователей были дублированные идентификаторы, и они выбирались несколько раз. Поэтому я попробовал следующий код для получения только уникальных идентификаторов. Однако, поскольку я вошел в консоль getState (). Для отладки сообщений он показывает пустой массив, потому что APIвызывается позже.

Что я не понимаю, так это почему «не ждут» работы ..

Кроме того, fetchUser никогда не вызывают, я не могу понять, почему ..

Я новичок в Redx и извините, если это глупый вопрос Вот мой код

import _ from 'lodash' ;

export const fetchEvery = () => async (dispatch, getState) => {
console.log("Before") ;
await dispatch(fetchData()) ;
console.log("After" , getState()) ;
const ids = _.uniq(_.map(getState().posts, 'userId')) ;
console.log(ids) ;
ids.forEach( id => dispatch(fetchUser(id))) ;
} ;

export const fetchData = () => dispatch => {
    let resp = {} ;

    fetch('http://jsonplaceholder.typicode.com/posts/')
    .then( res => {
            if ( res.ok )
              return res.json() ;
            else 
              throw Error(res.statusText)
          } )
    .then( res => {
            console.log(res) ;
            resp = res ;
            dispatch( {
                    type : 'FETCH_DATA' ,
                    payload : resp  
                }) ;
                    } )
    .catch( err => console.log(err) ) ;

} ;

export const fetchUser = (id) => (dispatch) => {
fetch('http://jsonplaceholder.typicode.com/users/' + id )
.then( res => {
            if ( res.ok )
              return res.json() ;
            else 
              throw Error(res.statusText)
          } )
    .then( res => {
            console.log(res) ;
            dispatch( {
                    type : 'FETCH_USER' ,
                    payload : res  
                }) ;
                    } )
    .catch( err => console.log(err) ) ;

} ;

1 Ответ

0 голосов
/ 03 февраля 2019

В ваших методах выборки return the fetch.В настоящее время они ничего не возвращают - так что никаких обещаний - поэтому ваш await на верхнем уровне разрешается немедленно, так как нет обещания wait для.

...