【发布时间】:2016-09-27 06:55:44
【问题描述】:
我正在使用 mysql 后端中的 ExpressJS 框架来处理 NodeJS。我在 for 循环中运行查询,然后我的循环和工作取决于查询的返回值。我对mysql查询不是很好,所以我通过for循环运行它。 问题是,由于异步 [我猜!],for 循环在查询结果出来之前很久就结束了。
这是我的代码:
function search_people_step2(user_id, search_criteria, user_friend)
{
var first_name_friends = [];
var last_name_friends = [];
for(var i = 0; i < user_friend.length; i++)
{
con.query("SELECT first_name, second_name FROM user WHERE userid = ?", user_friend[i],function(err, rows)
{
if(err)
{
//error;
}
else
{
if(rows.length == 0)
{
//nothing gets returned
}
else {
console.log(rows);
first_name_friends[i] = rows[0].first_name;
last_name_friends[i] = rows[0].second_name;
}
}
});
}
现在,我可以在查询语句中获取值(使用console.log),但是,在外部,该值变为空(未定义),因为已经计算了其余代码。
我该如何解决这个问题? 提前致谢。
【问题讨论】:
-
你不能,除非有同步方法来执行查询。
-
如何在JS中编写同步方法?
-
你不能,因为它取决于 sql 实现。如果你真的想返回一些东西,你可以使用承诺......
-
@n00dl3,我不明白。你能详细说明一下吗?对不起。我对 sql 语句知之甚少...
-
我目前正在手机上写作。回家后我会帮你更多。