簡體   English   中英

為什么我們需要將 Observable 轉換為 Promise 以獲得已解析的值?

[英]Why do we need to convert an Observable to Promise to get a resolved value?

來自: https : //medium.com/@ole.ersoy/synchronous-programming-with-rxjs-observable-6276721e674a

設想

我們想從 Observable 返回一個已解析的值。
方法一

將 Observable 變成 Promise 並像這樣等待它:

異步函數 returnTrue()
{
return await of(true).toPromise();
}
//記錄為真
returnTrue().then(console.log);

現在保證返回值可用,只要 observable 沒有出錯。

為什么我們需要將 Observable 轉換為 Promise 以獲得已解決的結果? Observables 不能自己獲得已解決的結果?

我在這里失蹤有什么意義?

那篇文章有一個錯誤的說法,說是Synchronous Programming with RxJS Observable但以Promise為例。

然而, Promise總是異步的,即使它立即被解決 這就是為什么我們需要async/awaitthencallback來執行承諾。

不需要將 Observable 轉換為 Promise 來獲取值,因為 observable 具有subscribe功能。

還要注意Promise只能返回一個值,而 Observable可以返回多個值

更多示例: https : //rxjs-dev.firebaseapp.com/guide/observable

根據我在大量使用 Observable 的情況下使用 Angular 的經驗,我需要將其轉換為 Promise 的用例是當我需要將數據傳遞給接受 Promise 作為其參數的 3rd 方庫時。

這是一篇垃圾文章,垃圾就在標題“Synchronous Programming with RxJS Observable”中。 任何這些都是同步的唯一原因是因為作者正在使用。 如果這些 observable 中的任何一個是有用的 observable,它們將是異步的。 這篇文章基本上可以被忽略並標記為毫無意義。

實際上有兩種方法可以運行Observable ,具體取決於需求

  1. 轉換為Promise
  2. 對它們調用subscribe方法

為什么需要它?

  • 因為Observable就像functions ,當我們定義函數時,當我們需要運行函數時,我們調用它們

  • 類似地,我們創建了Observable ,當我們需要運行(解析)它們時,我們要么

    • 將其轉換為Promise
    • 對它們調用Subscribe方法
  • 同樣從下面的示例中,我們可以看到解決Observable的兩種方法之間的區別。

 const Observable1 = rxjs.of(1, 2, 3); // By calling subscribe method Observable1.subscribe(next=>{ console.log("A", next); }); // By converting to Promise (async()=>{ const result = await Observable1.toPromise() console.log("B", result) })()
 <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.1.0/rxjs.umd.js"></script>

參考:

  1. https://rxjs.dev/guide/overview
  2. https://rxjs.dev/api/index/function/of

暫無
暫無

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

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