最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在AWS Lambda上调用函数异步

运维笔记admin11浏览0评论

在AWS Lambda上调用函数异步

在AWS Lambda上调用函数异步

我正在尝试将函数作为异步调用,因为我不想等待响应。

我已经阅读了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()

任何人都可以解释为什么会发生?

回答如下:

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);
});

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论