我正在嘗試創建一個簡單的可重構可觀察史詩,它可以反彈並且可以取消。我的代碼:反彈和取消可重複觀察
export const apiValidate = action$ => {
return action$.ofType(validateRequestAction)
.debounceTime(250)
.switchMap((action) => (
Observable.ajax({
url: url,
method: 'GET',
crossDomain: true,
headers: {
"Content-Type": 'application/json'
},
responseType: 'json'
})
.map(payload => (new APISuccessValidate()))
.takeUntil(action$.ofType(validateCancelAction))
.catch(payload => ([new APIFailureValidate()]))
));
};
代碼只有時纔有效。根據服務器的響應速度,我認爲可能會出現兩種情況之一。
情景1(作品):
Time 0ms - Fire validateRequestAction
Time 250ms - Ajax request occurs
Time 251ms - Fire validateCancelAction
Time 501ms - validateCancelAction passes debounce and cancels properly
Nothing else occurs
方案2(斷)
Time 0ms - Fire validateRequestAction
Time 250ms - Ajax request occurs
Time 251ms - Fire validateCancelAction
Time 400ms - Ajax returns, APISuccessValidate action fired
Time 501ms - validateCancelAction passes debounce and there is nothing to cancel
有沒有一種方法,我可以寫我的史詩,使得只有validateCancelAction可以繞過debounceTime並取消阿賈克斯呼籲沒有等待?
謝謝!
感謝您花時間解釋我對抖動動作的誤解,這對我幫助了很多,正確理解了這個問題。我嘗試了你提供的第二個解決方案,它完美的工作!我也不知道startWith,我相信這將在未來派上用場。 非常感謝! –
不客氣!我強烈建議花一些時間真正理解_why_它的作品:)祝你好運! – jayphelps
是的,我現在正在通過所有文檔工作=) –