Lambda函数:如何解决异步问题

时间:2018-05-31 10:40:16

标签: node.js asynchronous aws-lambda amazon-dynamodb

我在AWS上使用Lambda函数,代码用Nodejs编写 我有一个Asynchronus的问题。这是我的问题:

  • 我有4条用户记录
  • 我想获取其他详细信息并为每个用户调用其他lambda
  • 我正在做的是,我为每个用户制作循环
  • 然后在循环中,我试图调用其他lambda函数。

Consigder,我的代码是:

(allProblems).forEach( function(eachProblem){
  console.log("User:"+eachProblem.userId)
  /*Lambda invoke */
  lambda.invoke({
    FunctionName: 'invitationHandler',
    Payload: JSON.stringify(params, null, 2) // pass params
    }, function(error, data) {
      /* Code For update data in another table */
     console.log("Data saved");
    }
  })

当前输出为:

User: 1
User: 2
Data saved
User: 3
Data saved
User: 4
Data saved

预期产出:

User: 1
Data saved
User: 2
Data saved
User: 3
Data saved
User: 4
Data saved

请帮我解决这个问题...... 感谢

1 个答案:

答案 0 :(得分:0)

您可以使用async / await node functionnality来管理异步调用。

检查文档:https://blog.risingstack.com/mastering-async-await-in-nodejs/

  1. 将您的功能定义为' async'。
  2. 使用await
  3. 例如,使用您的代码,尝试类似:

    try {
      (allProblems).forEach(function(eachProblem) {
        console.log("User:"+eachProblem.userId) 
        /*Lambda invoke */ 
        var data = await lambda.invoke({ FunctionName: 'invitationHandler', Payload: JSON.stringify(params, null, 2) // pass params }) console.log("Data saved")
      }
    }
    catch(e) {
      console.log(e)
    }