user7357308
user7357308

Reputation:

aws-lambda-nodejs: How can I use callback function to return a value which I printed in aws-console?

This is the code running in an aws lambda function.

exports.handler = (event, context, callback) => {
            // TODO implement

          mqfunc1(func2);



};
var func2 = function(data) {
            console.log('got data: '+data);

};
var mqfunc1 = function(callback) {
        var myCallback = function(data) {
        console.log('got data: '+data);
        };

        var usingItNow = function(callback) {
        callback('get it?');
        };

};

Now I do get the the message which i want to print in the console. But I want to show the same message printed in the console using the callback function inside exports.handler.

I tried using callback function using various ways inside exports.handler but I am always getting null. I do understand that in a node js scripts all the function calls are asynchronous, so how do I return a value from any function and callback the same inside exports.handler, i.e. display the same in Execution result.

Upvotes: 15

Views: 33465

Answers (2)

Levarne Sobotker
Levarne Sobotker

Reputation: 1140

That was the old version of lambda i.e for Node.js runtime v0.10.42. The new AWS version callback has two arguments i.e for Node.js runtime v4.3 or v6.10

callback(response_error, response_success)

module.exports.publisher = (event, context, callback) => 
{
   callback(response_error, response_success)
}

I tend to pass a status code, in case I want to use the result after my job is done:

const response_success = {
      statusCode: 200,
      body: JSON.stringify({
        message: 'ok'
      }),
};

const response_error = {
    statusCode: 400,
    body: JSON.stringify({
        message: 'error'
    }),
};

if (error) {
   callback(response_error)
} else {
   callback(undefined, response_success)
}

Reference: http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html

Upvotes: 26

dusty
dusty

Reputation: 573

You should call the callback function itself — the one passed as an argument to exports.handler.

E.g.:

exports.handler = (event, context, callback) => {
      mqfunc1(callback);
};

var mqfunc1 = function(callback) {
    callback({'result': 'success'});
};

Upvotes: 6

Related Questions