Я нашел странное поведение 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
Почему подписчик субъекта продолжает потреблять ошибку после первого () оператора (), если следующее излучение этого суб ⇐ Javascript
Форум по Javascript
1744274351
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();
})
});
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79566137/why-subjects-subscriber-keeps-consume-an-error-after-the-first-operator-if[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия