嗨,我是新來的反應/ Redux的發展環境,讓我明白任何幫助。承諾解決所有內部承諾解決之前,多個異步API調用
我試圖讓2 API調用我的app.js dispatch(fetchAllPositions(selectedUserDivision))
當異步調用componentDidMount
我發現了一個建議的方法在this post和fetchAllPositions
功能在Promise.all
export function fetchAllPositions(division) {
return dispatch => Promise.all([
dispatch(fetchUserPositionsIfNeeded(division)),
dispatch(fetchDefaultPositionsIfNeeded(division))
])
.then(console.log("fetched both"))
}
兩個動作功能幾乎是一樣的,他們只需要調用一個稍微不同的API網址。其中一個看起來像如下,其中shouldFetchUserPosition
只是一個純函數返回一個布爾值:
function fetchUserPositions(division) {
return dispatch => {
const url = apiOptions.server + `/api/user/position?division=${division}`
dispatch(requestUserPositions(division))
return fetch(url, options)
.then(response => response.json())
.then(json => dispatch(receiveUserPositions(division,json)),
err => console.log(err))
}
}
export function fetchUserPositionsIfNeeded(division) {
return (dispatch, getState) => {
if (shouldFetchUserPositions(getState(), division)) {
return dispatch(fetchUserPositions(division))
} else {
return Promise.resolve()
}
}
}
的邏輯是對的更新,同時拉動數據REQUEST...
動作被髮送,那麼RECEIVE...
動作當數據準備好更新到新狀態時發送。
麻煩的是,Promise.all
應該等待REQUEST1
REQUEST2
RECEIVE1
RECEIVE2
所有做.then(console.log("fetched both"))
眼下之前進來,它確實在.then
後第2 REQUEST
完成後,不會等待2 RECEIVE
到進來了。
我懷疑它是requestUserPositions()
的嵌套性質它包裝fetch()
的REQUEST
動作是一個簡單的功能,而在減速它只是翻轉功能內的isFetching
屬性true
:
function requestUserPositions(division) {
return {
type: REQUEST_USER_POSITIONS,
division
}
}
對不起這麼久的問題,但我會很感激的任何建議。