2014-01-16 4 views
0

회사 채팅 시스템 용 Hubot 어댑터에서 작업하고 있습니다. 다음 코드의 결과는 매우 놀랍습니다. 다음에 어디로 갈지 잘 모르겠습니다.node12의 coffeescript에서 내 Hubot 어댑터의 이상한 동작

connect console 
DEBUG connect logger 
posted console 

코드 : : 당신이 콜백 함수 내에서 동일하게 @을 원하는 경우에

connect: -> 
    console.log 'connect console' 
    @logger.debug 'connect logger' 

    @jsonClient.post 'Route/WebService/Json/Login', loginRequest, (err, res, body) -> 
    console.log 'posted console' 
    @logger.debug 'posted logger' 
+0

놀랍습니다. '@logger.debug '로거 출력을 게시하지 않으셨습니까? '@ jsonClient.post'는 콜백을 호출 할 때 어떤 문맥을 사용합니까? –

+0

@muistooshort 네, 저에게 놀라운 일 이죠. 사실이 예제는 단순화되었습니다. 실제로 나는 계속에서 또 다른 http 전화를하고 싶지만 아무 일도 일어나지 않을 것 같다. 문맥? 몰라. 로컬 클래스의 ctor에서 jsonClient를 인스턴스화합니다.이 질문에 대답합니까? –

답변

1

은 그대로 (지금까지 내가 말할 수있는) 어떤 런타임 오류

가 출력이 없다 외부에서 fat-arrow (=>)으로 콜백을 정의하십시오.

@jsonClient.post 'Route/WebService/Json/Login', loginRequest, (err, res, body) => 
    #... 

@ (AKA this)은 (Coffee | Java) 스크립트 함수 내에서 함수가 정의 된 방법이나 위치가 아닌 함수 호출 방법에 따라 다릅니다 (물론 바운드 함수가없는 한 ...). =>을 사용하여 함수를 정의하면 현재 @@logger에 바인딩되고 @jsonClient은 콜백 내부에 있어야합니다.

또한 Function.bind을 사용할 수

callback = (err, res, body) -> 
    console.log 'posted console' 
    @logger.debug 'posted logger' 

@jsonClient.post 'Route/WebService/Json/Login', loginRequest, callback.bind(@) 

네이티브 솔루션을 원합니다.

관련 문제