我正在学习使用Angular 2和Typescript在离子2中进行开发。你可以返回一个observable作为Angular 2(使用Typescript)的承诺吗?
我立即试图创建一个函数,该函数返回一个在观察变量发生变化时得到解决的承诺。
对于我来说,在页面组件尝试使用它之前检测提供程序中的初始化是否已完成时,这将会非常有用。例如
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'或用'toPromise(承诺之间选择),然后。 ' 如果你这样做了,只有一个人一旦解决就会被调用。 – deKajoo
我发现用testObserver.complete()替换最后一行;给我我想要的行为。正如Brandon在回答问题(http://stackoverflow.com/questions/38557214/rxjs-topromise-behavior-different-than-observable)时提到的那样“当RxJs将Observable转换为Promise时,它会创建一个Promise,从可观察到的最后一个值。因此,承诺不会解决,直到潜在的observable完成。“ –