AWS Lambda-控制应用程序流

时间:2019-02-08 09:49:15

标签: node.js amazon-web-services lambda

我正在尝试正确构建我的AWS lambda。遇到错误时,我试图退出Lambda。通过简单的一个Lambda函数,我可以做到这一点:

exports.handler = async (event, context) => {    
    const someError = new Error('Something is wrong');
    throw someError;
};

它按预期结果(在几次尝试之后)进入DeadQueue。

当我想成功解决问题时,请执行以下操作:

exports.handler = async (event, context) => {  
    // ... some code here        
    return {};    
};

现在我想使用require构建我的应用程序,所以我有这样的东西:

//Main execution point
const validator = require('./Validate/Validator');

exports.handler = async (event, context) => {    
    let aaa = validator.validate(operationName);
    console.log('I should not bere here')        
};

验证者本身:

exports.validate = async (schemaName, payload) => {
    console.log('I am coming here')
    try {            
        const Schema = require(`../ValidationSchemas/${schemaName}`).schema;
    }
    catch (e) {            
        const schemaError = new Error('Validation schema not found. Operation does not exist.');
        throw schemaError;
        //process.exit(0);            
    }
};

在验证器中会发生什么,如果我引发错误,则会引发错误,但是我的执行将在主要(调用方)lambda函数中继续进行。我想使用

将其停止
  

process.exit(0)

它确实起作用。 Lambda终止。但是出于某种原因,这似乎是一种不好的方法。理想情况下,我将从主要功能执行此操作,但是我正在考虑最佳方法。

1 个答案:

答案 0 :(得分:1)

您需要在Lambda函数中实现错误处理。

const validator = require('./Validate/Validator');

exports.handler = (event) => {

  try {
    let aaa = validator.validate(operationName);
  }
  catch (error) {
    return error;
  }  

};