我是REDX-SAGO的小菜,如果我錯過了一些明顯的東西,請耐心等待。如何確保一個佐賀完成之前完成?
我有一個場景,我使用的是REDX-SAGA從OIDC提供程序中獲取access_token並將其存儲在瀏覽器的localStorage中。 我也使用Sagas從API端點獲取一些數據。 但是我一直在使用這種方法遇到問題,因爲調用外部API的Saga在Auth Saga可以使用access_token解析之前被調用。
我的驗證城:
export function * handleFetchTokens() {
try {
const token = yield cps(getToken)
localStorage.setItem('token', token)
const isAuthenticated = !!(token)
yield put(actions.checkAuthSuccess(isAuthenticated))
} catch (e) {
yield put(actions.checkAuthFailure(e))
}
}
export default function * sagas() {
yield fork(takeLatest, actions.CHECK_AUTH, handleFetchTokens)
}
我的API城:
export function * handleFetchItems() {
try {
const response = yield call(getItems)
yield put(actions.fetchItemsSuccess(response))
} catch (e) {
yield put(actions.fetchItemsFailure(e.errors))
}
}
export default function * sagas() {
yield fork(takeLatest, actions.FETCH_ITEMS, handleFetchItems)
}
我的根之城:
export default function * root() {
yield fork(items.sagas)
yield fork(authentication.sagas)
}
應該怎樣解決這個問題的正確方法?
儘管我仍然在努力完成這項工作,但您的建議似乎相當不錯。我想知道我是否可以實現類似於您所說的「在從應用中分派任何操作之前獲取令牌」。這聽起來好多了! 基本上,我派遣了在'react-router's'onEnter'上獲取令牌的動作,並且由於傳奇的異步性質,處理需要使用該令牌的所有其他動作變得非常棘手。 – Hawkes
也許,在應用程序的開始階段(呈現應用程序/路由器之前),您可以渲染簡單的加載器並請求令牌。一旦你收到令牌,你可以渲染整個應用程序,包括反應路由器。這樣就不會有任何視圖邏輯可以在調用可用之前調用任何需要令牌的其他操作。 –