2016-08-20 5 views
-1

라이브러리에서 단일 스레드 응용 프로그램으로 콜백 함수를 사용해야합니다. 나는 방법을 homerSendJsonMessage이라고 몇 번 부르고 그것을 하나씩하는 것이 중요하다. 항상 이전 것을 기다리십시오. 그것은 건축업자와 같습니다.일반 함수 콜백 호출

저는 라이브러리 콜백 함수를 사용하고 있습니다.하지만이를 내 메소드에 넣으면 JavaScript가 한 번에 모두 수행됩니다. (나는 이유를 안다.) 나는이 예가 그것을 해결할 수 있다고 생각한다. 하지만 "IDE"는 말하지 않습니다 - 반환 값이 .. 어떤 조언 이요? 당신의 sendJson 방법으로 라이브러리

homerSendJsonMessageToYoda(message:YodaJsonMessage, callback:((message:YodaJsonMessage, error:any)=>void)):void; 
+0

IDE는 바로, 당신이 방법은'반환 정의를 YodaJsonMessage | 오류 '하지만 함수가 아무 것도 반환하지 않습니다. –

+0

알아,하지만 어떻게 해결할 수 있니? – TyZet

+0

'lib.homerSendJsonMessage'는 무엇을 반환합니까? 또한, 자바 스크립트는 항상 단일 스레드입니다. –

답변

1

에서

public sendJson(request:YodaJsonMessage):YodaJsonMessage|Error { 
    lib.homerSendJsonMessage(request, (message:YodaJsonMessage, error:any) => { 
     if (!message) { 
      return error; 
     } else { 
      return message; 
     } 
    }); 
} 

명령은 비동기 작업이 완료되기 전에 값을 반환 할 수 비동기 기능을 사용하고 있습니다.
당신은 할 수 있습니다 :

public sendJson(request: YodaJsonMessage, cb: (result: YodaJsonMessage | Error) => void): void { 
    lib.homerSendJsonMessage(request, (message: YodaJsonMessage, error: any) => { 
     if (!message) { 
      cb(error); 
     } else { 
      cb(message); 
     } 
    }); 
} 

(2) 약속 반환 :

(1) 콜백을 사용

public sendJson(request: YodaJsonMessage): Promise<YodaJsonMessage> { 
    return new Promise((resolve, reject) => { 
     lib.homerSendJsonMessage(request, (message: YodaJsonMessage, error: any) => { 
      if (!message) { 
       reject(error); 
      } else { 
       resolve(message); 
      } 
     }); 
    }); 
}