1. 程式人生 > >RxJS 中 呼叫Subject.error()會造成什麼結果

RxJS 中 呼叫Subject.error()會造成什麼結果

最近一段時間做一個需求,需要我根據伺服器斷開 的時候我將一個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清零。