参见英文答案 >
Rxjs toPromise behavior different than observable 1个
我正在学习使用Angular 2和Typescript在Ionic 2中进行开发.
我正在学习使用Angular 2和Typescript在Ionic 2中进行开发.
我立即尝试的是创建一个函数,该函数返回一个在观察到的变量发生变化时得到解决的promise.
这对我来说很有用,可以在页面组件尝试使用它之前检测提供程序中的初始化是否已完成.例如
api.isInitialized() .then(() => { //api provider is initialized. Now safe to call it! return api.fetch("NEWS"); }); .then((newsData) => { //do something with newsData });
我有以下导入:
import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; import { Observable} from 'rxjs/Observable';
只是为了检查我对如何使用促销的理解,我尝试调用以下函数.我只得到“testObservable已经改变”.
我希望也得到“承诺解决”.
如何更改testObservable以获得已解决的承诺?
observerTest(){ let testObservable: any; let testObserver: any; testObservable = Observable.create(observer => { testObserver = observer; }); let myPromise = testObservable.toPromise(); testObservable.subscribe(data => { console.log("testObservable has changed."); console.log(data); }); myPromise.then(() =>{ console.log("promise resolved."); }); testObserver.next(true); }
解决方法@H_502_35@
官方
Angular tutorial包含示例,尤其是在
HTTP chapter中.例如:
getHeroes(): Promise<Hero[]> {
return this.http.get(this.heroesUrl)
.toPromise()
.then(response => response.json().data as Hero[])
.catch(this.handleError);
}
和
delete(id: number): Promise<void> {
const url = `${this.heroesUrl}/${id}`;
return this.http.delete(url,{headers: this.headers})
.toPromise()
.then(() => null)
.catch(this.handleError);
}
getHeroes(): Promise<Hero[]> { return this.http.get(this.heroesUrl) .toPromise() .then(response => response.json().data as Hero[]) .catch(this.handleError); }
和
delete(id: number): Promise<void> { const url = `${this.heroesUrl}/${id}`; return this.http.delete(url,{headers: this.headers}) .toPromise() .then(() => null) .catch(this.handleError); }