在AWS Lambda上运行的node.js中忽略了回调问题
我在node.js(nodejs10.x)中有这段代码,它在AWS Lambda中运行在AWS Lambda上运行的node.js中忽略了回调问题,node.js,callback,aws-lambda,Node.js,Callback,Aws Lambda,我在node.js(nodejs10.x)中有这段代码,它在AWS Lambda中运行 module.exports.register = (event, context, callback) => { // Body es un json por lo que hay que deserializarlo let body = JSON.parse(event.body); let rules = { 'name': 'required|min:3', '
module.exports.register = (event, context, callback) => {
// Body es un json por lo que hay que deserializarlo
let body = JSON.parse(event.body);
let rules = {
'name': 'required|min:3',
'family_name': 'required|min:3',
'email': 'required|email',
'curp': 'required|size:18',
'modules': 'required',
'password': 'required'
};
let validation = new validator(body, rules);
// If errors this validation exits using the callback
if(validation.fails()){
console.log(validation.errors.all())
const response = {
statusCode: 422,
body: JSON.stringify(validation.errors.all())
};
callback(null, response);
}
// just for testing
const isModulesValid = false;
if(!isModulesValid){
console.log('Modules validation failed. ')
const response = {
statusCode: 422,
body: JSON.stringify({'modules': 'Invalid modules string. '})
};
callback(null, response);
// However this is not working
}
// and even if there is an error this code is executed
console.log('XXXX');
我用这样的代码在本地测试它
// Callback
let callback = function(err, result) {
if (err)
console.log(err);
if (result)
console.log(result);
// Terminate execution once done
process.exit(0);
}
// lambda.generateToken(event, context, callback);
lambda.register(event, context, callback);
在本地,如果isModulesValid=false,则代码退出,并且不会执行console.log('XXXX')。但是,在AWS Lambda中运行时,即使验证失败,代码仍将继续运行,并执行console.log()
我搞不懂发生了什么事。请帮助?您正在本地使用具有
进程的回调。退出(0)代码>使流程完成,因此下一行不执行。回调并不意味着之后的代码不会被执行。之后代码流也会继续。这完全取决于回调中的内容。这段代码解决了问题:
if(!isModulesValid){
console.log('Modules validation failed. ')
const response = {
statusCode: 422,
body: JSON.stringify({'modules': 'Invalid modules string. '})
};
// Return callback explcitly
return callback(null, response);
}
显然,这与AWS Lambda如何处理任务队列有关。我在这里找到了一个很好的解释:我对此表示怀疑。但是,回调是由AWS Lambda运行时给出的。你知道在这种情况下会发生什么吗?谢谢