2017-03-17 1 views
0

로깅을위한 글로벌 "실행 컨텍스트"서비스 (MDC와 유사)와 사용자 상호 작용 및 웹 소켓 연결과 같은 두 종류의 트리거가 있다고 상상해보십시오.실행 컨텍스트에 값을 첨부하는 방법은 무엇입니까?

우리는 로그 메시지에 "실행 컨텍스트"를 사용하는 로거 서비스를 가지고 있습니다.

사용자가 버튼을 누르면 서비스가 컨텍스트를 가져오고 http 요청이 트리거되고 결과는 로깅을 포함하여 해석됩니다.

한편 우리는 websocket을 통해 메시지를 받고이를 해석해야합니다. 그래서 우리는 "실행 컨텍스트"를 설정하고 서비스의 기존 컨텍스트를 덮어 씁니다.

http 결과를 받기 전에 websocket observable이 트리거되면 로그 메시지가 동일한 실행 컨텍스트를 얻게됩니다.

여러 관찰 가능 항목에 대해 자체 실행 컨텍스트를 가질 가능성이 있습니까?
NgZone (zone.js)을 사용하려고 생각했지만 컨텍스트를 저장하는 방법을 찾지 못했습니다.

답변

0

zone.js를 사용하면이 작업을 수행 할 수 있습니다. 당신은 자신 만의 context 객체를 저장하기 위해 자신의 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

+0

감사합니다.하지만 Observables 및 Angular와 결합하는 방법은 무엇입니까? – CSchulz

+0

Observables의 사용법을 설명하기 위해 필자의 대답을 업데이트했습니다. –

+0

Angular에서 NgZone을 선호하는 방법입니까? 가져 오기 영역을 사용할 수 없습니다. Zone.js 0.7.7을 사용하고 있습니다. – CSchulz

관련 문제