簡體   English   中英

從訂閱中獲得可觀察性

[英]get observable from a subscription

在做了一些實驗之后,我發布了沒有更改的代碼,以找到最佳實踐:我有一個函數(在服務中)將結果訂閱為 BLOB 並將其作為文件內容保存到本地文件系統 - FileSaver.saveAs(result, );:

printAsPDF()
{
   if (<some validator fails>)
   {
      return;
   } 
   let htmlContent = "<html><body>" + <some html content> +"</body></html>";
   //this.GetByteArrayForPDF returns Observable<any> (actually observable of a blob)
   this.GetByteArrayForPDF(htmlContent).subscribe(result => 
   {
      FileSaver.saveAs(result, <file name>); 
   }, error => console.log(error));
}

現在,我希望函數 printAsPDF 也返回一個 observable,指示保存操作是否成功。 當前,正在從組件執行對該函數的調用:

this.<service name>.printAsPDF();

我希望該組件函數訂閱 observable 並檢查保存是否成功。 考慮到調用 printAsPDF 應該得到一個 observable(true) 取決於 FileSaver.saveAs(result, ) 是否被調用,我該怎么做

更改您對mapsubscribe (當然,您需要在組件中訂閱才能使可觀察對象變熱)。 您可以將錯誤處理程序移動到您的組件或將其放入catch方法中。

return this.GetByteArrayForPDF(htmlContent)
.map(result => 
{
   FileSaver.saveAs(result, <file name>); 
   return true;
})
.catch(error => { 
    console.log(error);
    return Observable.of(false);
});

或使用可管道操作符(RxJS 5.5+):

import { catchError, map } from 'rxjs/operators';

return this.GetByteArrayForPDF(htmlContent).pipe(
map(result => 
{
   FileSaver.saveAs(result, <file name>); 
   return true;
}),
catchError(error => { 
    console.log(error);
    return Observable.of(false);
}));

暫無
暫無

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

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