打包回调到正常功能

时间:2016-08-20 00:20:03

标签: javascript typescript callback

我需要覆盖从库到单线程应用程序的一些回调函数。我多次调用方法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;

1 个答案:

答案 0 :(得分: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);
            }
        });
    });
}