【发布时间】:2017-07-22 01:42:33
【问题描述】:
我正在学习使用 Angular 2 和 Typescript 在 Ionic 2 中进行开发。
我立即尝试创建一个函数,该函数返回一个承诺,该承诺在观察到的变量发生变化时得到解决。
这对于我在页面组件尝试使用提供程序之前检测何时完成初始化很有用。例如
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';
为了检查我对 toPromise 如何工作的理解,我尝试调用以下函数。我只得到“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);
}
【问题讨论】:
-
这不是因为您可以选择使用
.subscribe将 observable 解析为 observable 还是使用toPromise().then的 promise 如果您同时执行这两种操作,则只有一个会在解决后被调用。 -
我发现用 testObserver.complete(); 替换最后一行给了我想要的行为。正如 Brandon 在回答问题 (stackoverflow.com/questions/38557214/…) 时提到的,“当 RxJs 将 Observable 转换为 Promise 时,它会创建一个 Promise,该 Promise 将从 observable 中产生最后一个值。因此,在底层 observable 完成之前,promise 不会解决。”
标签: angular typescript ionic2