【发布时间】:2018-01-12 19:05:16
【问题描述】:
我正在尝试创建一个简单的 redux-observable 史诗,它可以去抖动并且可以取消。我的代码:
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()]))
));
};
该代码仅在某些时候有效。根据服务器的响应速度,我相信可能会发生 2 种情况中的 1 种。
场景 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 并取消 ajax 调用而无需等待?
谢谢!
【问题讨论】:
标签: rxjs redux-observable