AWS Lambda - управление потоком приложений - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь правильно структурировать свою лямбду AWS.Я пытаюсь выйти из 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);            
    }
};

Что происходит в валидаторе, если я выбрасываю ошибку, выдается ошибка, но мое выполнение продолжается в основной (вызывающей) лямбда-функции.Я думал, чтобы остановить его, используя

process.exit (0)

Это работает.Лямбда прекращается.Но это выглядит как плохой подход по некоторым причинам.В идеале я бы сделал это из основной функции, но я думаю о лучшем подходе.

1 Ответ

0 голосов
/ 08 февраля 2019

Вам необходимо реализовать обработку ошибок в лямбда-функции.

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

exports.handler = (event) => {

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

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...