繁体   English   中英

如何将 SQL 查询结果存储在 JavaScript 变量中以在全局 scope 中使用?

[英]How to store SQL query result in a JavaScript variable to use in global scope?

初学者在这里,我试图将 SQL 查询的结果存储到 JavaScript 变量中,这样我就可以从全局 scope 访问它以在其他代码中使用。

这是代码:

const latestRunContacts = () => {
  db.all(
    `SELECT email FROM Contacts_tbl WHERE RunID = (SELECT MAX(UID) FROM Run_tbl)`,
    (err, row) => {
      console.log(row);
    }
  );
};

这记录了我试图获得的值,但是一旦我尝试这样做:

const latestRunContacts = () => {
  db.all(
    `SELECT email FROM Contacts_tbl WHERE RunID = (SELECT MAX(UID) FROM Run_tbl)`,
    (err, row) => {
      return row;
    }
  );
};

console.log(latestRunContacts());

Then it returns undefined... Since typeof row is an object, I've tried declaring an object and assigning the result of the SQL query to it and calling the function immediately like so:

let contactEmail = {
  email: (function latestRunContacts() {
    db.all(`SELECT email FROM Contacts_tbl WHERE UID = '1'`, (err, row) => {
      return row;
    });
  })(),
};

console.log(contactEmail.email);

但这也只是返回未定义。

我想要做的甚至可能吗? 如果是这样,怎么办??

我错过了查询返回如下对象数组的事实:

[
   {
      email: "email@address.xyz"
   }
]

要将结果存储在变量中,必须将其分配给数组中 object 的索引,如下所示:

let results = "";

const latestRunContacts = () => {
  db.all(
    `SELECT email FROM Contacts_tbl WHERE RunID = (SELECT MAX(UID) FROM Run_tbl)`,
    (err, row) => {
      results = row[0].email;
    }
  );
};

然后运行console.log(results)将记录字符串email@address.xyz

这与回调和 javascript 的异步特性有关。

一个快速解决您的问题的方法是:

let latestContacts;
db.all(
  `SELECT email FROM Contacts_tbl WHERE RunID = (SELECT MAX(UID) FROM Run_tbl)`,
  (err, rows) => {
    if (err) throw err;
    latestContacts = rows;
    console.log(latestContacts);
  },
);

我建议阅读这篇文章,总结回调、承诺和异步函数: https://scotch.io/courses/10-need-to-know-javascript-concepts/callbacks-promises-and-async

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM