簡體   English   中英

RXJS6-從Promise函數返回一個Observable,該函數返回一個Observable?

[英]RXJS6 - return an Observable from a Promise function which returns an Observable?

我有一個方法getData ,它返回一個Observable<SupportingDocument>
因為它是外部API,所以無法更改代碼和返回值 )。

  getData(): Observable<SupportingDocument> {
    return of(new SupportingDocument());
  }

當用戶單擊按鈕時,我們實際上會向他顯示一個“模態”頁面。 當該模式關閉時(Promise api)-我們應該調用getData()並返回值:

  public dialogShow(): Promise<Observable<SupportingDocument>> {
    return Promise.resolve(1).then(() => { //modal was closed
      return this.getData();
    })
  }

最后,我應該提供一個show()方法,該方法應該返回從return this.getData();返回的值(和錯誤return this.getData(); shows()的返回值不必是Observable,也可以是一個promise )。

所以我這樣做了:

  public show(): Observable<SupportingDocument> {
    return new Observable<SupportingDocument>((obs) => {
      this.dialogShow().then((res: Observable<SupportingDocument>) => obs.next(res), (res) => obs.error(res));
    })
  }

完整的代碼:

//user starts here
public show(): Observable<SupportingDocument> {
    return new Observable<SupportingDocument>((obs) => {
      this.dialogShow().then((res: Observable<SupportingDocument>) => obs.next(res), (res) => obs.error(res));
    })
  }



  public dialogShow(): Promise<Observable<SupportingDocument>> {
    return Promise.resolve(1).then(() => {
      return this.getData();
    })
  }


  getData(): Observable<SupportingDocument> {
    return of(new SupportingDocument());

  }

我想我已經把這樣一個簡單的任務復雜化了。 更多-我真的不喜歡new Observable構造方法。

如果不使用可觀察的構造函數(包括錯誤處理)解決方案,是否可以解決此問題?

完整的演示代碼

為什么不只將Promise包裝到Observable (以便您可以使用Observable可以提供的所有運算符) ,然后使用switchMap()呢?

public dialogShow(): Observable<SupportingDocument> {
    return from(Promise.resolve(1)).pipe(switchMap(() => this.getData()));
}

工作StackBlitz

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM