我有一個Observable,它提出一個請求,回覆一些每次都不相同的信息。用戶點擊一個按鈕可以調用這個可觀察對象。我想阻止用戶在請求返回信息之前單擊此按鈕,並且一旦它返回,允許用戶再次單擊以進行更新。rxjs油門提取直到請求完成
這是在任何時候都不停止用戶的請求。
const fetchRepos =() =>
fetch('https://api.github.com/search/repositories?q=+language:javascript&sort=updated&order=desc')
.then(response => response.json())
export function fetchReposEpic(action$: any) {
return action$.ofType(FETCH_POPULAR_REPOS_REQUEST)
.switchMap(fetchRepos)
.map(data => ({
type: FETCH_POPULAR_REPOS_SUCCESS,
payload: data.items
}))
}
一種解決方案是可觀察的後油門500毫秒的用戶開始
export function fetchReposEpic(action$: any) {
return action$.ofType(FETCH_POPULAR_REPOS_REQUEST)
.throttleTime(500)
.switchMap(fetchRepos)
.map(data => ({
type: FETCH_POPULAR_REPOS_SUCCESS,
payload: data.items
}))
}
這裏的問題是,我只是估算請求可能需要多長時間,更糟糕的是,如果該請求完成在此之前,用戶可以點擊該按鈕並且點擊將被忽略。
離我最近的解決方案是將獲取承諾傳遞給油門。
export function fetchReposEpic(action$: any) {
return action$.ofType(FETCH_POPULAR_REPOS_REQUEST)
.throttle(fetchRepos)
.map(data => ({
type: FETCH_POPULAR_REPOS_SUCCESS,
payload: []
}))
}
這將等待,直到請求完成,並將遏制所有其他行動,直到那時。問題是我不知道如何獲取油門的返回值。全部throttle examples我能找到的還顯示了油門被扔掉的返回值。所以總結一下,我想要一種方法,等待觀察結束完成後再重新啓動它。
對此有幫助嗎? :) – jayphelps