首页 > 解决方案 > 在地图循环内的 AWS Lambda 中执行 Aysnc 任务

问题描述

我需要从数据库中获取用户详细信息,其中用户列表以数组的形式提供。

await userList.map(async (usr, index) => {
    let sql = "SELECT `id`,`email`, `firstname`, `lastname` FROM `users` WHERE `id` = '"+usr.user_id+"'";
    let user_info = await getData(sql,0);
    userData.push(userObj);
});

获取数据功能:-

let getData = async (sql, params) => {
  return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
          if (err){
                  reject(err);
          }
          connection.query(sql, params, (err, results) => {
              if (err){
                  reject(err);
              }
              connection.release();
              resolve(results);
          });
      });
  });
};

现在的问题是在从数据库中提取结果之前退出函数。

如果我删除循环并拉出一条记录,一切正常。

但是,我需要为所有用户获取数据。

标签: javascriptamazon-web-servicesasynchronousaws-lambda

解决方案


在这种情况下,您可以避免使用 map 而是使用 for 循环来实现结果。

您可以尝试下面的 SO 代码段,看看这是否是您需要的结果。

getData = (userId) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("user"+ userId); 
    }, 500)
  })
}


ids = [1,2,3];

//Final results
results = [];

async function getAllDataAsync(){
  for(let i = 0; i < ids.length; i++ ){
    let user_info = await getData(ids[i]);
    results.push(user_info);
  }
  return Promise.resolve(results);

}

async function start(){
  const res =  await getAllDataAsync();
  console.log(res);
  console.log("Got the results. Put rest of the logic here");
}

start();
console.log("Function will exit first");


推荐阅读