将RxJS Observable转换为Promise

问题描述:

我试图使用多个http调用将数据存储在本地存储中。我使用forkJoin等到所有呼叫都已完成,然后我想恢复我的Promise.then呼叫链。我该怎么做呢?将RxJS Observable转换为Promise

updateCache() { 
    var cachesToUpdate; 

    return this.fetchServerTimestamps() 
     .then(res => { 
      var localTimestamps = this.getLocalTimestamps(); 
      var serverTimestamps = this.getServerTimestamps(); 

      //Compare timestamps and decide which cache data types to update 
      cachesToUpdate = this.cacheTypes.filter(function (cacheType) { 
       return localTimestamps ? localTimestamps[cacheType.timestamp] != serverTimestamps[cacheType.timestamp] : true; 
      }); 
     }).then(res => { 
      //Request data and insert into cache 
      this.fetchData(cachesToUpdate) 
       .subscribe(res => { 
        res.forEach(function (item, index) { 
         this.insert(cachesToUpdate[index].messageType, JSON.stringify(item)); 
        }.bind(this)); 
       }); 
     }); 
} 

fetchData(cachesToUpdate): Observable<any> { 
    return forkJoin(cachesToUpdate.map(i => this.callservice.serverRead({ path: 'api/' + i.messageType }))); 
} 

insert(key: string, value: string, compress = true) { 
    localStorage.setItem(key, compress ? LZString.compress(value) : value); 
} 

可以使用的Observable

toPromise()方法

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/topromise.md

this.fetchData(cachesToUpdate).toPromise().then(...) 

编辑:如FriOne & Lyubimov罗马在c提到omment,别忘了

import 'rxjs/add/operator/toPromise'; 
+6

不要忘记'输入“rxjs/add/operator/toPromise”;' –