したがって、これを将来の参考として残しておきます。この質問を書いているときにようやく機能した簡単な解決策です。
import * as types from './types'
var gpsGetInterval
export function startLocationTracking(time = 1000){
return dispatch => {
gpsGetInterval = setInterval(() =>{
navigator.geolocation.getCurrentPosition(
(position) => {
dispatch({
type: types.NEW_POSITION,
state: JSON.stringify(position)
})
})
}, time)
dispatch({
type: types.START_RUN
})
}
}
export function stopLocationTracking(){
clearInterval(gpsGetInterval)
return {
type: types.STOP_RUN
}
}
したがって、これはスケーラブルではない可能性があり、またはepics
の下で使用する必要があるかもしれないことを理解しています. この 2 で私が直面した困難は次のとおりです。redux-observable
sagas
- clearを使用する
redux-observable
と、定期的なイベントが明確ではありませんでした (または一時停止するための回避策のように見えました)。
- を使用
sagas
すると、スケーリングや集計が簡単に見えません。
これredux-observables
が私が手に入れたコードです。誰かがこの種のケースについて良いアイデアを持っているなら、私はそれについて聞きたいです:):
export function inStartRun(action$){
return action$.ofType(types.START_RUN)
.switchMap(function () {
Rx.Observable
.interval(1000)
.do(function () { console.log('tick...') })
.share()
.mapTo({ type: types.STOP_RUN})
});
}
レポhttps://github.com/redux-observable/redux-observable/issues/168で作成した質問の Jay Phelps に感謝します。