我有这种情况。
// this is in myService.ts
public myFunction() {
return new Promise((resolve) => {
let click = Observable.fromEvent(window, "click");
this.myStream = click
.map(() => Observable.timer(10000))
.switch()
.subscribe(() => {
// show alert here
});
});
}
// this is in home.ts page
ngOnInit() {
this.myService.myFunction().then(() => {
//simulate click at start
let event = new MouseEvent("click", {bubbles: true});
this.renderer.invokeElementMethod(
this.simulateClick.nativeElement, "dispatchEvent", [event]);
});
}
我的问题是在哪里写 resolve()。我需要的是, Observable.fromEvent 成功,之后进行点击模拟。如果我写下resolve(),请在行下单击= Observable.fromEvent(窗口,“单击”); 然后先模拟点击,然后是Observable.fromEvent。
答案 0 :(得分:2)
对于angular2 observables,简单而干净的方法是将Observable
转换为Promise
并返回。
如果不存在,请下载toPromise extension。
import 'rxjs/add/operator/toPromise';
public myFunction() {
return Observable.fromEvent(window, "click")
.map(() => Observable.timer(10000))
.switch()
.toPromise();
}