gpt4 book ai didi

javascript - NodeJS mysql同步查询

转载 作者:可可西里 更新时间:2023-11-01 07:34:09 24 4
gpt4 key购买 nike

我想像这样在 nodejs 中运行同步查询...

for (var i in data){

conn.query("Select 1 from user where userid="+data[i].id,function(err,row){
Rows.push(row);
});

}

console.log(Rows);

在此代码块中,我的行始终为空...我想运行同步查询

最佳答案

你可能无法在线程阻塞的意义上同步使用这样的函数(你也不应该!)但是如果你使用数据库连接的 promise 版本(使用 Bluebird 的 promisifyAll 或特定的promise 版本的 mysql 驱动程序在 npm 上可用)和新的 async/await 语法(或基于生成器的协程,用于早于 Node 7.x 的平台,其中 async/await 不可用——另一种选择是使用 Babel 进行转译)。

示例 - 您可以使用这样的代码:

for (var i in data) {
let row = await conn.query("Select 1 from user where
userid="+data[i].id);
Rows.push(row);
}
console.log(Rows);

但如果它可以并行运行,那么这样的事情会更高效、更短:

let Rows = await Promise.all(data.map(item =>
conn.query("Select 1 from user where userid=" + item.id));
console.log(Rows);

有关该主题的更多详细信息,请参阅:

注意 - 它只能在用 async 关键字声明的函数内部使用。

警告:您的代码可能容易受到 SQL 注入(inject)攻击。您应该在 SQL 中使用占位符而不是字符串连接。我没有修复您代码的那个方面 - 有关更多详细信息,请参阅这些答案:

关于javascript - NodeJS mysql同步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com