我的目标是在Ionic 3项目中使用RxJs switchMap
,以取消任何正在进行的登录尝试(如果服务器脱机并仅使用最新的请求)。否则,我可以在稍后获得一些不需要的异步副作用。尝试使用Ionic 3中的switchMap取消现有的http请求
在我的视图层中,我使用submitStream$
来捕获按钮点击流,然后将其作为方法参数传递给服务层。 在服务层中,我通过switchMap
创建response$
,将传递的参数submitStream$
与Observable<Response>
组合起来,该Observable<Response>
从this.webServiceUtil.testLogin()
返回。
我想实现这个代码:
HTML标记
<button #submit type="submit">Submit</button>
打字稿:视图层
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromEvent';
import { ElementRef, ViewChild } from '@angular/core';
export class LoginPage {
@ViewChild('submit') button: ElementRef
submitStream$:any;
...
ionViewDidLoad() {
this.submitStream$ =
Observable.fromEvent(this.button.nativeElement, 'click')
}
...
}
打字稿:服务层(submitStream $进来的方法参数)
this.response$ = submitStream$.switchMap(click =>
this.webServiceUtil.testLogin())
我也试过在ngAfterViewInit()
创建this.submitStream$
当事情没有工作,我也试过这个追加到Observable.fromEvent:
.subscribe(ev => {
console.log('LoginPage: ionViewDidLoad() submitStream$.subscribe(): ev:', ev);}
)
如何克服'ERROR TypeError: Invalid event target'?
为什么使用switchMap()? –
尝试将此代码移动到ngAfterViewInit()函数 –
@SandeepSharma能够取消iniital http请求并接受最新的 – JGFMK