【问题标题】:node js variable value outside function within same file同一文件内函数外的节点js变量值
【发布时间】:2016-02-12 16:38:31
【问题描述】:

我有以下代码

function getPNOP(callback){
  var result = result;
  connection.query('SELECT DISTINCT pnop FROM MASTER1', [], function(err, result){
    if(err){
      console.log(err);
    }
    callback({result: result[0].pnop});
  });
}
var PNOP;

getPNOP(function(resultsObject){
    var PNOP = resultsObject.result;
    exports.PNOP = PNOP;
    console.log(resultsObject.result)
})

console.log("Line 233 - PNOP updated : "+PNOP +CurrTime);

我能够在“console.log(resultsObject.result)”行中获取 PNOP 的值,但在下一个控制台日志行中它是未定义的。

要查看如何在函数外部使用导出的值,我尝试在上述代码下方添加以下行:

var myModule = require.('getPNOP');
var PNOP = myModule.PNOP;

但这不起作用...

关于我应该如何在 getPNOP 函数之外获取 PNOP 变量值的任何建议?

【问题讨论】:

  • 想澄清一下,上面的整个代码都在另一个函数中——其中定义了 CurrTime 变量,并且在日志条目中正确显示了 CurrTime——只有 PNOP 变量值没有出现。

标签: node.js variables asynchronous export require


【解决方案1】:

JavaScript 是同步的,它会以这种方式运行你的代码。

您的代码将按以下顺序执行

  1. 声明PNOP 变量。在这个阶段是undefined
  2. 调用函数getPNOP()
  3. 运行console.log(...)PNOP 仍然是 undefined
  4. 您的匿名回调函数运行并声明一个新变量PNOP 并为其分配resultsObject.result 的值。

要么将记录 PNOP 值的代码移动到回调函数中,要么将其包装在一个 Promise 中,以帮助您像同步运行一样运行异步代码,如下所示。

function getPNOP(){
    return new Promise(function(resolve, reject){
        var result = result;
        connection.query('SELECT DISTINCT pnop FROM MASTER1', [], function(err, result){
            if(err){
                reject(err);
            }
            resolve(result[0].pnop);
        });
    });
}

getPNOP().then(function(PNOP){
    console.log("Line 233 - PNOP updated : "+PNOP +CurrTime);
}).catch(function(err){
    console.log("An error occured");
});

【讨论】:

  • 谢谢丹尼尔。会试试这个。但是,不确定这是否仍会使 PNOP 变量值在此函数之外可用——这是我的要求——而不仅仅是捕获日志中的值。关于如何实现这一目标的任何建议?
  • 是的,你可以在外部闭包之前和外部声明它,而不是在承诺范围内,当你有值时分配它。但是,在您的原始代码中,您声明了两次 PNOP。在你想使用的范围内声明,有值时赋值。
  • 如果它适合您,您应该考虑将其标记为答案。
  • 抱歉回复延迟。无法承诺在我的测试机器上工作 - 我正在尝试调试它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多