首页 > 解决方案 > 无法将mysql结果存储在外部变量中

问题描述

我尝试了所有可以在网上找到的方法来完成这项工作,但没有一个奏效。我对 sql 数据库进行查询,然后尝试将结果存储在全局范围内的变量中。我通过返回一个承诺来尝试它,使用 await 使用回调,但它们都不起作用。
请我需要帮助。

const checkEmailUsed = (email) => {


let sql = "SELECT * FROM users_signup WHERE user_email = ? LIMIT 1";
  return new Promise((resolve, reject) => {
    conn.query(sql, email, (err, res) => {
      if (err) {
        reject(err);
        return;
      }
      resolve(res[0]);
    });
    conn.end();
  });
};

var user = [];
checkEmailUsed("mikias@email.com")
  .then((res) => user.push(res))
  .catch((err) => console.log(err));

console.log(user); // Still []

标签: javascriptmysqlnode.jsexpressasynchronous

解决方案


它认为这是真的,这是因为您的控制台比查询先运行。

这是一个例子:

假设您使用一个云 mysql 数据库示例。然后你的连接需要 10 秒才能得到结果。

这意味着,当您的查询等待结果时,您的控制台已被执行。

所以,为了解决这个问题,也许你可以试试下面的简单代码async/await

const simpleFunction = async () => {
  const users = await checkEmailUsed("mikias@email.com");
  console.log(users);
}

simpleFunction();

是的,这是你的例子。


推荐阅读