{Статус: 202} при запуске лямбды из кода

Это мой код в Javascript:

    var params = {
        FunctionName: "theTable",
        InvokeArgs: JSON.stringify({ "name": "KirklandWA" })
    };
    lambda.invokeAsync(params, function (err, data) {
        if (err) console.info(err, err.stack); // an error occurred
        else {
            console.info(data);
        }
    });

Это в лямбде:

exports.handler = async (event, context) => {
    return "theReturnedValue";
};

Что происходит, так это то, что он не возвращает theReturnedValue, а вместо этого возвращает

{Status: 202} Status: 202

Вызывается код в Lambda, я в этом убедился на Cloudwatch.

Можете ли вы успешно запустить лямбда-тест в лямбда-консоли? В таком случае он должен сказать «Успех» и «theReturnedValue» в качестве ответа. если он успешно работает в тестовой консоли, ваша проблема, вероятно, связана с API-шлюзом.

NicoLA 26.10.2018 22:23

@NicoLA проблема в invokeAsync().

Michael - sqlbot 27.10.2018 01:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
4 664
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Убедитесь, что ваша лямбда выбрана в качестве среды выполнения NodeJs 8.10, после проверки вы должны вернуть обещание напрямую:

exports.handler = async (event, context) => {
    return await new Promise((resolve, reject) => {
        resolve({ message: "hello world" });
    });
};

Я искал определение метода invokeAsync в документация по aws-sdk, и код состояния в порядке:

Callback parameters:

  1. err (Error) — the error object returned from the request. Set to null if the request is successful.
  2. data (Object) — the de-serialized data returned from the request. Set to null if a request error occurs. The data object has the following properties:
    • Status — (Integer) It will be 202 upon success.

Я готовлю вам базовый пример, просмотрите файл handler.js:

https://github.com/ns4lin4s/stackoverflow

Не забывайте, что вы должны указать тело ответа:

Так что, когда вы закончите, дайте мне знать, как это работает!

Нет, результат тот же. Я получаю 202, но не хочу возвращать никаких других данных.

AmazingDayToday 29.10.2018 21:58

откуда вызывается эта лямбда? Я предполагаю, что у вас есть api, и этот api вызывает другую лямбду, в любом случае вы должны указать данные ответа, выше есть изображение. пожалуйста, если не работает, дайте мне более подробную информацию .. я надеюсь помочь вам

ene_salinas 30.10.2018 03:26
Ответ принят как подходящий

Проблема в том, что ваш lambda function ничего не возвращает вызывающему абоненту.

У вашей функции дескриптора есть третий параметр, который является функцией обратного вызова, которая используется для возврата результатов вызывающей стороне.

Функция callback принимает два значения: ошибку и результаты.

callback(Error error, Object result);

Если вы предоставите значения Error, лямбда выдаст сообщение об ошибке, которое вы предоставите пользователю, если вы не предоставите значение Error, а результаты, это результаты, которые будут возвращены.

Все это очень хорошо задокументировано здесь

Вот основные примеры

callback();     // Indicates success but no information returned to the caller.
callback(null); // Indicates success but no information returned to the caller.
callback(null, "success");  // Indicates success with information returned to the caller.
callback(error);    //  Indicates error with error information returned to the caller.

Ваша функция-обработчик должна быть.

exports.handler = async (event, context,callback) => {
     callback(null, "theReturnedValue");
};

Это неверный ответ. Проблема в том, что лямбда вызывается с помощью invokeAsync, который является просто псевдонимом для вызова функции с типом вызова Event, а не RequestResponse. Это, как следует из названия, асинхронный вызов, выполняемый по принципу «запустил и забыл», то есть он не возвращает никакого ответа. Вместо этого используйте RequestResponse, чтобы получить синхронный вызов, при котором результат переносится обратно. Другие ответы также касаются этого факта, но принятый ответ - нет.

JHH 22.06.2021 11:57

Вы вызываете с помощью invokeAsync, который возвращает только код состояния, как указано в документации. Вместо этого используйте invoke с InvocationType: "RequestResponse"

Ссылка: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property

var lambda = new AWS.Lambda({});
var params = {
  FunctionName: "function_name", 
  InvocationType: "RequestResponse"
};
response = lambda.invoke(params, function(err, data) {
  if (err) console.info(err, err.stack); // an error occurred
  else     console.info(data);           // successful response
});

Мои два цента - invokeAsync устарел

Dmitry Grinko 27.04.2020 19:12

Другие вопросы по теме