我正在尝试创建一个简单的可重构可观察史诗,它可以反弹并且可以取消。我的代码:反弹和取消可重复观察
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
是的,我现在正在通过所有文档工作=) –