Action Creator 未等待
Action Creator not awaiting
我在我的应用程序中使用占位符 json api 来获取一些帖子及其用户。然而,用户有重复的 ID,并且这些 ID 被多次获取。所以我尝试了以下代码来仅获取唯一的 ID。但是,当我控制台记录 getState().posts 进行调试时,它显示一个空数组,因为 api稍后调用。
我不明白的是为什么 'await' 不工作..
此外,fetchUser 从未被调用我不明白为什么..
我是 redux 的新手,很抱歉这是一个愚蠢的问题
这是我的代码
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) ) ;
} ;
在您的获取方法中 return
fetch
。目前他们没有返回任何东西 - 所以没有承诺 - 因此你的 await
在顶层立即解决,因为没有承诺 wait
for.
我在我的应用程序中使用占位符 json api 来获取一些帖子及其用户。然而,用户有重复的 ID,并且这些 ID 被多次获取。所以我尝试了以下代码来仅获取唯一的 ID。但是,当我控制台记录 getState().posts 进行调试时,它显示一个空数组,因为 api稍后调用。
我不明白的是为什么 'await' 不工作..
此外,fetchUser 从未被调用我不明白为什么..
我是 redux 的新手,很抱歉这是一个愚蠢的问题 这是我的代码
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) ) ;
} ;
在您的获取方法中 return
fetch
。目前他们没有返回任何东西 - 所以没有承诺 - 因此你的 await
在顶层立即解决,因为没有承诺 wait
for.