0

我有這種情況。如何解決()可觀察成功後的Promise

// 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]); 
}); 
} 

我的問題是在哪裏寫決心()。我需要的是,Observable.fromEvent成功,然後做點擊模擬。如果我寫了resolve()讓我們假設在行下讓let click = Observable.fromEvent(window,「click」);然後模擬點擊,然後是Observable.fromEvent。

回答

2

對於angular2可觀察性,簡單幹淨的方法是將Observable轉換爲Promise並返回。

下載toPromise extension如果它不存在。

import 'rxjs/add/operator/toPromise'; 

public myFunction() { 
    return Observable.fromEvent(window, "click") 
     .map(() => Observable.timer(10000)) 
     .switch() 
     .toPromise(); 
} 
+0

這不是解決方案。我需要訂閱這個活動。 – djumerko

+0

爲什麼?它已經有一次爲你訂閱了。然後你可以'myFunction()。然後'應該做你需要的。 – Val