RxJS 中 呼叫Subject.error()會造成什麼結果
阿新 • • 發佈:2019-02-09
最近一段時間做一個需求,需要我根據伺服器斷開 的時候我將一個react元件丟擲出,剛開始我的思路是當server.js中的onerror觸發的時候我丟擲一個observable 異常,observable.error.call(observable). 我epic中的處理是action.map(dispatch(action2)).catch().
感覺這行程式碼行得通,所以我就屁顛屁顛的擼程式碼,但是在我伺服器重連成功的時候,並沒有按照預期那樣dispatch(action2).我百思不得其解,不知道哪個環節出錯了,就在我抓頭撓腮的時候,發現了。subject.error的原形方法:
Subject.prototype.error = function (err) { if (this.closed) { throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); } this.hasError = true; this.thrownError = err; this.isStopped = true; var observers = this.observers; var len = observers.length; var copy = observers.slice(); for (var i = 0; i < len; i++) { copy[i].error(err); } this.observers.length = 0; };
原來它會把所有訂閱這個observable的observers清零。