Angular 2:将 Observable 转换为 Promise

新手上路,请多包涵

问)如何将以下 observable 转换为 promise,以便可以使用 .then(...) 调用它?

我想转换为承诺的方法:

   this._APIService.getAssetTypes().subscribe(
    assettypes => {
        this._LocalStorageService.setAssetTypes(assettypes);
    },
    err => {
        this._LogService.error(JSON.stringify(err))
    },
    () => {}
  );

它调用的服务方法:

   getAssetTypes() {
    var method = "assettype";
    var url = this.apiBaseUrl + method;

    return this._http.get(url, {})
      .map(res => <AssetType[]>res.json())
      .map((assettypes) => {
        assettypes.forEach((assettypes) => {
          // do anything here you might need....
      });
      return assettypes;
    });
  }

谢谢!

原文由 Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

rxjs7

 lastValueFrom(of('foo'));

https://indepth.dev/posts/1287/rxjs-heads-up-topromise-is-being-deprecated

rxjs6

https://github.com/ReactiveX/rxjs/issues/2868#issuecomment-360633707

不要管。默认情况下,它位于 Observable 对象上。

>  Observable.of('foo').toPromise(); // this
>
> ```

**rxjs5**

import ‘rxjs/add/operator/toPromise’; import ‘rxjs/add/operator/map’;

this._APIService.getAssetTypes() .map(assettypes => { this._LocalStorageService.setAssetTypes(assettypes); }) .toPromise() .catch(err => { this._LogService.error(JSON.stringify(err)); });

”`

原文由 Günter Zöchbauer 发布,翻译遵循 CC BY-SA 4.0 许可协议

observable 可以像这样转换为 Promise:

 let promise=observable.toPromise();

原文由 Luca C. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进