簡體   English   中英

如何從回調函數中修改全局變量。 在 node.js 中

[英]How can i modify a global variable from within a callback function . in node.js

在 node.js 中,我想將 mysql 查詢的結果存儲在全局變量中,以便我可以將其導出或將其記錄到控制台,但似乎全局變量並未從回調函數中修改,那又如何?可以做 ? 請幫助,tgis 是我的簡單代碼

    var mysql = require("mysql");
var text = "begin : ";
var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "ajax",
});
con.connect(function (err) {
  if (err) throw err;

  var sql = "SELECT * FROM `nom`";
  con.query(sql, function (err, result) {
    if (err) throw err;

    result.forEach((row) => {
      text +=
        "  the first is : " +
        row.first +
        " and the second is : " +
        row.second +
        "\n";
    });
  });
  con.end();
});

console.log(text);

您當前的代碼不是完全同步的,即第 1、第 2 和第 3 行可能作為第 1、第 3、第 2 行執行。您的代碼是異步的,因為您調用了使用回調的con.connect (即它將調用您在嘗試連接到您的 mysql 數據庫時提供的功能)。 如果您想在連接后打印文本,則不建議使用全局變量或更准確地說是使用您的console.log(text); 在你的代碼末尾,因為console.log(text); 可能會在con.connect嘗試連接到您的數據庫之前運行。 因此,以下是針對此特定示例的一項建議:

var mysql = require("mysql");
var text = "begin : ";
var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "ajax",
});
con.connect(function (err) {
  if (err) throw err;

  var sql = "SELECT * FROM `nom`";
  con.query(sql, function (err, result) {
    if (err) throw err;

    result.forEach((row) => {
      text +=
        "  the first is : " +
        row.first +
        " and the second is : " +
        row.second +
        "\n";
    });
    console.log(text); 
    //write code to export to file/remote service here
  });
  con.end();
});


Javascript 函數作用域是我所鏈接的另一個特殊興趣,並且有許多資源可以描述和探索它。 建議在您未來的代碼中,尤其是因為您正在使用嘗試本地化或在您的函數范圍內工作的異步代碼,並避免使用將在不同時間被不同函數修改的全局變量,這些變量可能難以預測和因此將認為您的項目/代碼“不可預測”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM