[英]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/await
, then
或callback
來執行承諾。
不需要將 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 ,具體取決於需求
Promise
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>
參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.