2016-12-30 28 views
2

这是在aws lambda函数中运行的代码。aws-lambda-nodejs:如何使用回调函数返回我在aws-console中打印的值?

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

}; 

现在我确实得到了要在控制台中打印的消息。但我想使用exports.handler中的回调函数显示在控制台中打印的相同消息。

我尝试使用回调函数内使用exports.handler内的各种方式,但我总是变空。我明白,在一个节点js脚本中,所有的函数调用都是异步的,那么如何从任何函数返回一个值,并在exports.handler内部调用相同的回调函数,即在执行结果中显示相同的值。

+0

您可以添加您期望的样本输出。 – gvmani

回答

3

您应该调用callback函数本身 - 作为参数传递给exports.handler

例如为:

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

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

谢谢,这对像我这样的新手来说真的很有用:) –

5

这对Node.js的运行v0.10.42旧版本拉姆达即的。新版本的AWS回调有两个参数,即针对Node.js的运行V4.3或V6.10

回调(response_error,response_success)

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

我倾向于通过一个状态代码,如果我想使用的结果后,我的任务完成了:

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

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

+1

我认为你在代码示例的第二行中有一个错字。您希望将'response_success'作为第二个参数而不是'response_error'传递给回调函数 – kekko12