[英]Why subscription not firing after first subscribe for a hot observable
在我的代碼中,我使用share()創建了一個可觀察的熱點,如果我沒有完成observable,或者使用setTimeout使它異步,則僅執行第一個訂閱,之后將不再執行任何其他訂閱。 這是預期的行為嗎?
const c=Rx.Observable.create((obs)=>{
obs.next(1)
// add this will work
// setTimeout(()=>obs.next(1),1000)
// add this will work too
// obs.complete()
}).share()
// excuted
c.subscribe(()=>console.log('first subscribe'))
// not excuted
c.subscribe(()=>console.log('second subscribe'))
如果我改為使用發布連接方法,則可以按預期工作。
const c=Rx.Observable.create((obs)=>{
obs.next(1)
}).publish()
// excuted
c.subscribe(()=>console.log('first subscribe'))
// excuted
c.subscribe(()=>console.log('second subscribe'))
c.connect()
讓我們逐步講解示例。
Rx.Observable.create((obs)=>{
obs.next(1)
})
這將創建一個可觀察的對象,並在您請求訂閱時執行傳遞給您的create
函數。
.share()
這共享上游訂閱。 這意味着第一個訂閱者進行share
創建對源的訂閱,而所有后續訂閱者共享(如此!)。 如果所有訂閱者都取消其訂閱,則也將取消對源的訂閱。 請注意,流完成之前也會創建新的訂閱。
c.subscribe(()=>console.log('first subscribe'))
第一個訂閱者進行訂閱, share
操作員創建一個共享訂閱。 因此,執行預訂功能並發出一個值。
c.subscribe(()=>console.log('second subscribe'))
第二個訂閱者進行訂閱, share
操作員重新使用對源的現有訂閱。 因此, 不執行訂閱功能,並且不發出任何值。
如果將.unsubscribe()
添加到第一個subscribe
則它將按預期工作,因為共享訂閱已取消,第二個訂閱者導致了該訂閱函數的另一次執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.