节点如何创建回调,以便自定义函数同步运行

时间:2016-12-21 18:37:49

标签: javascript node.js

我正在尝试向自定义函数添加回调函数,以便我可以使用函数中建立的值。但是,目前我的回调函数中没有任何内容被调用 - 因此日志消息“添加protobuf消息”永远不会被调用,并且值永远不会被使用。我不确定我做错了什么。基本上我只想将其设置为同步运行,因为我需要函数中的值作为输出添加。

var protoMessage;

createProtobufMessage(function(){

    logClient.trackTrace('The protomessage is' + protoMessage);


});



function createProtobufMessage() {

}

2 个答案:

答案 0 :(得分:1)

您需要在createProtobufMessage中声明一个参数才能接收回调。

然后,您可以像调用其他任何函数一样调用此参数。

答案 1 :(得分:0)

可以这样做:

    var protoMessage;

createProtobufMessage(function(){

    logClient.trackTrace('Adding the protobuf message');

    logClient.trackTrace('The protomessage is' + protoMessage);

    context.bindings.output = protoMessage;
    context.done();    
});


/**
* Create a protobuf message.
*/
function createProtobufMessage(callback) {

    protobuf.load(GetEnvironmentVariable('ProtoBufFilePath'), function(error, root) {

        if (error) {
            logClient.trackException('An error occured when loading the protobuf file');
            throw error;
        }

        logClient.trackTrace('Creating a new protobuf message');

        // Obtain a message type
        var messageType = root.lookup(GetEnvironmentVariable('ProtoBufMessageType'));

        // Create a new message
        var message = messageType.create({
            header: {
                protocolVersion: 1,
                messageCreationTime: 2505,
                eventId: 2505,
                clientTimestamp: 1709,
            }
        });

        // Encode a message (note that reflection encodes to a writer and we need to call finish)
        var buffer = messageType.encode(message).finish();
        var messageDec = messageType.decode(buffer);

        protoMessage = JSON.stringify(messageDec);
        logClient.trackTrace('A protobuf message has been successfully created' + protoMessage);
    });
    callback();
}