在AWS Lambda上运行的node.js中忽略了回调问题

在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', '

我在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',
    '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运行时给出的。你知道在这种情况下会发生什么吗?谢谢