Как прикрепить значения к контексту выполнения?
Представьте, что у вас есть глобальный "контекст выполнения" для ведения журнала (сравнимый с MDC) и два вида триггеров, таких как взаимодействие с пользователем и подключение через веб-сокет.
У нас есть служба ведения журнала, которая использует "контекст выполнения" для сообщений журнала.
Пользователь нажимает на кнопку, служба получает контекст, запускается http-запрос, и результат интерпретируется, включая ведение журнала.
Тем временем мы получаем сообщение через веб-сокет, и нам нужно его также интерпретировать. Таким образом, мы устанавливаем наш "контекст выполнения" и перезаписываем существующий в сервисах.
Проблема заключается в том, что сообщения журнала получат тот же контекст выполнения, если наблюдаемый веб-сокет будет запущен до получения результата http.
Есть ли возможность иметь собственный контекст выполнения для нескольких наблюдаемых?
Я думал об использовании NgZone (zone.js) для этого, но я не нашел никакого способа для сохранения контекста.
1 ответ
Вы можете использовать zone.js для этого. вам нужно создать свой собственный zoneSpec для хранения вашего собственного объекта контекста. в вашем обработчике нажатия кнопки.
<button (click)="clicked()">Click</button>
clicked() {
Zone.current.fork({
name: 'context',
properties: {
context: YOUR_OWN_CONTEXT_OBJECT
}
}).run(()=> {
yourService.getData().subscribe(data => {
// you can access the context like this.
const context = Zone.current.get('context');
});
webSocket.on('message', function(data) {
// you can access the context like this.
const context = Zone.current.get('context');
});
});
}
вот плункер, я не уверен, каково ваше требование, плункер просто покажет, как делиться данными. https://plnkr.co/edit/xHZbs1Zb04CbM73ydSYR?p=preview