Вызвать функцию async на AWS Lambda - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь вызвать функцию как асинхронную, потому что я не хочу ждать ответа.

Я прочитал документы AWS и там сказал использовать InvocationType как Event но это работает, только если я .promise().

не работает версия :

lambda.invoke({
  FunctionName: 'rock-function',
  InvocationType: 'Event',
  Payload: JSON.stringify({
    queryStringParameters: {
      id: c.id,
      template: c.csvTemplate
    }
  })
})

рабочая версия :

lambda.invoke({
  FunctionName: 'rock-function',
  InvocationType: 'Event',
  Payload: JSON.stringify({
    queryStringParameters: {
      id: c.id,
      template: c.csvTemplate
    }
  })
}).promise()

Кто-нибудь может мне объяснить, почему это происходит?

1 Ответ

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

invoke возвращает экземпляр AWS.Request, который не будет автоматически выполнять запрос.Это представление запроса, который не отправляется до тех пор, пока не будет вызван send().

Вот почему последняя версия работает, а первая - нет.Запрос отправляется при вызове .promise().

// a typical callback implementation might look like this
lambda.invoke({
    FunctionName: 'rock-function',
    InvocationType: 'Event',
    Payload: JSON.stringify({
        queryStringParameters: {
            id: c.id,
            template: c.csvTemplate,
        },
    }),
}, (err, data) => {
    if (err) {
        console.log(err, err.stack);
    } else {
        console.log(data);
    }
});

// ... or you could process the promise() for the same result
lambda.invoke({
    FunctionName: 'rock-function',
    InvocationType: 'Event',
    Payload: JSON.stringify({
        queryStringParameters: {
            id: c.id,
            template: c.csvTemplate,
        },
    }),
}).promise().then(data => {
    console.log(data);
}).catch(function (err) {
    console.error(err);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...