我正在學習使用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完成。「 –