2016-08-20 48 views
-1

我需要覆盖从库到单线程应用程序的一些回调函数。我多次调用方法homerSendJsonMessage,重要的是要逐一完成。总是等待前一个。这就像一个建设者。包装回调到正常功能

我在库中有回调函数 - 但是当我把它们放到我的方法中时,JavaScript一次全部执行。 (我知道为什么),我认为这个例子可以解决它。但“IDE”说 - 没有返回值..任何建议?

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

从库

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

的IDE是正确的,可以定义该方法返回'YodaJsonMessage |错误“,但该函数不返回任何内容。 –

+0

我知道 - 但我怎么解决? – TyZet

+0

'lib.homerSendJsonMessage'返回什么?另外,JavaScript总是单线程的。 –

回答

1

当你的sendJson方法司令部正在使用异步函数异步操作完成之前,你不能返回一个值。
你可以这样做:

(1)使用的回调:

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)返回一个承诺:

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); 
      } 
     }); 
    }); 
}