node js在同一文件

时间:2015-11-11 14:49:32

标签: node.js variables asynchronous export require

我有以下代码

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变量值应该做些什么的任何建议?

1 个答案:

答案 0 :(得分:0)

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

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

  1. 声明PNOP变量。在此阶段undefined。{/ li>
  2. 调用函数getPNOP()
  3. 运行console.log(...)PNOP仍为undefined
  4. 您的匿名回调函数会运行并声明一个新变量PNOP,并为其指定resultsObject.result的值。
  5. 将记录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");
    });