javascript - 在地图循环内的 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);
});
});
});
};
现在的问题是在从数据库中提取结果之前退出函数。
如果我删除循环并拉出一条记录,一切正常。
但是,我需要为所有用户获取数据。
解决方案
在这种情况下,您可以避免使用 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");
推荐阅读
- dataframe - 我想从创建的数据框中获取 excel 文件,该文件会自动更改,如代码中所写
- javascript - 我应该创建一个接口、类还是两者兼而有之?
- cloud - 谷歌云功能给予
- symfony - 如何获得 Doctrine 可排序的“重复输入错误”
- arduino - 在 Arduino 中传递/打印参数
- counter - 每当创建新的时间序列时,将 prometheus 计数器初始化为 0
- c# - 在 ASP.NET 3 中创建延迟
- excel - 删除表中的隐藏(过滤)行
- laravel - 带有确认方法手册的 Stripe PaymentIntent 每次都失败
- spring - Spring oauth2将客户端保存在数据库中