亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Observable 訂閱者在哪里執行

Observable 訂閱者在哪里執行

海綿寶寶撒 2021-12-12 11:01:01
我試圖了解 Angular observables 以及訂閱的函數是異步調用還是在 Javascript 事件循環中調用。例如,如果我撥打以下電話:    this.http.get<Result>('http://www.example.com').subscribe(result => {        // Do something with result that affects the UI    });我知道實際的網絡請求和響應get是異步完成的,但是該函數是result => {}在同一個異步任務中還是在 Javascript 事件循環中執行的?我在代碼注釋中要求我回避的原因: // Do something with result that affects the UI
查看完整描述

3 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

實際上,異步請求回調和訂閱函數也被添加到事件循環中,特別是添加到任務隊列中,并在任務隊列為空時推送到堆棧中執行。這里是一個更詳細的解釋,并指它以這個為菲利普·羅伯茨有關事件循環偉大的視頻。


查看完整回答
反對 回復 2021-12-12
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

這完全取決于 observable 的類型,有熱的和冷的 observable。您給出的示例將在進行 http 調用后發出,一個由 of 或行為主題構成的可觀察對象將在訂閱后立即同步運行。

查看一個行為主題的源代碼

https://github.com/ReactiveX/rxjs/blob/master/src/internal/BehaviorSubject.ts

你會看到 next 在訂閱時被調用。

這一切都取決于可觀察的類型。


查看完整回答
反對 回復 2021-12-12
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

https://rxjs-dev.firebaseapp.com/guide/scheduler

null 通過不傳遞任何調度程序,通知以同步和遞歸的方式傳遞。將此用于恒定時間操作或尾遞歸操作。

默認是同步的,http observable 沒有設置調度器

角度http可觀察

但是對于您的問題,我假設您正在設置模板中使用的組件的屬性。除非您在組件中使用 onPush,否則在 subscribe 塊中設置值將顯示更改。

除非您在多個地方使用訂閱中的值,否則在模板中使用訂閱的最佳方法是執行以下操作:

myexampledata = this.http.get<Result>('http://www.example.com')

然后在模板中

{{myexampledata | async}}

訂閱和取消訂閱將由框架處理。如果您需要以某種方式更改數據的形狀以進行顯示,您可以將值映射到您想要的

myexampledata = this.http.get<Result>('http://www.example.com').pipe(     map(returnedvalue => returnedvalue.whatiminterestedin))

如果您設置模板中使用的組件的屬性,則角度變化檢測將處理更新。


查看完整回答
反對 回復 2021-12-12
  • 3 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號