Почему подписчик субъекта продолжает потреблять ошибку после первого () оператора (), если следующее излучение этого субJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Почему подписчик субъекта продолжает потреблять ошибку после первого () оператора (), если следующее излучение этого суб

Сообщение Anonymous »

Я нашел странное поведение rxjs , которое меня беспокоит, и я даже не могу представить решение этой проблемы. А затем испускайте из субъекта a null значение.
Все работает так, как предполагалось, но подписчик этого наблюдаемого продолжает потреблять ошибку, которая испускалась после первой подписки, даже с первым () оператором.
Как это возможно?import { Subject, throwError, of } from 'rxjs';
import { switchMap, tap, first } from 'rxjs/operators';

var subj$ = new Subject();

var obs$ = subj$.asObservable().pipe(
switchMap((v) => {
if (!v) {
return throwError(() => 'ERROR');
}

return of(v);
})
);

obs$
.pipe(
first(),
tap({
next(v) {
console.log('obs$', v);
},
error(err) {
console.error('obs$ error', err);
},
}),
tap(() => subj$.next(null))
)
.subscribe();

subj$.next('VALUE');

// obs$ VALUE
// obs$ error ERROR 'Unauthenticated.');
}

return of(user);
})
);

constructor(private socketService: SocketService) {}

authenticate(user: User) {
this.isAuthenticatedSource.next(true);
this.userSource.next(user);

return this.socketService.emit('join', user);
}

// consumes the error from second emission
deauthenticate() {
return this.user$.pipe(
first(),
switchMap((user: User) => this.socketService.emit('leave', user)),
tap(() => {
this.isAuthenticatedSource.next(false);
this.userSource.next(null);
})
);
}
}

class SocketService {
socket = {
emit(event: string, data: any, ack: (res: any) => any) {
return { event, data, ack };
}
}

emit(event: string, data: any): Observable {
return new Observable(subscriber => {
this.socket.emit(event, data, (res) => {
subscriber.next(res);
subscriber.complete();
})
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... perator-if
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»