Выполнение задач Aysnc в AWS Lambda внутри цикла карты - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно получить информацию о пользователе из базы данных, где список пользователей представлен в массиве.

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

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

Если я удаляюЗацикливание и извлечение одной записи все работает нормально.

Но мне нужно получить данные для всех пользователей.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

В этом случае вы можете избежать отображения и использовать цикл 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");
0 голосов
/ 09 октября 2019

Попробуйте и дайте мне знать, если это поможет:

await Promise.all(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(user_info);
  }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...