模块中的返回值返回Null?

时间:2015-11-11 00:06:53

标签: javascript node.js module npm

我正在尝试创建一个可以实现计时器的模块(Parse Cloud Code)。问题是它为最终执行时间返回一个空值。我认为它与无法检索初始启动变量有关。

我怎样才能实现这一目标。谢谢!

var start;
var end;

exports.beginTimer = function beginTimer(functionName) {

    //Start timing now
    var start = new Date().getTime();
}

exports.endTimer = function endTimer(functionName) {

    //End timer
    var end = new Date().getTime();
    var time = end - start;
    alert('Execution time for' + functionName + ': ' + time);
}

2 个答案:

答案 0 :(得分:3)

您已在每个功能中重新声明startend

使用同名的局部变量屏蔽全局变量。

endTimer获取undefined的值start

除非您要创建本地范围的变量,否则请勿使用var

答案 1 :(得分:1)

使用关键字" var"在您的方法中,您可以在方法本身的名称空间中创建此变量。

这就是为什么在你的" beginTimer"您的变量已在方法块的末尾删除。因此,使代码工作的最简单方法是删除" var"来自方法中的变量声明。

如果你在完成它们之前调用多个方法,这可能会发生新的错误,因为它们都会使用相同的" start"和"结束"。您可能想要考虑在" functionName"之间使用某种映射。和"开始"。

你可以这样做:

var start = {};

exports.beginTimer = function beginTimer(functionName) {

    //Start timing now
    start[functionName] = new Date().getTime();

}

exports.endTimer = function endTimer(functionName) {

    //End timer
    var end = new Date().getTime();
    var time = end - start[functionName];
    alert('Execution time for' + functionName + ': ' + time);
}

由于在方法完成之前调用两次方法时可能会出现新问题,因此您可能希望使用传递给方法的唯一标识符。

var start = {};

exports.beginTimer = function beginTimer(functionName, uid) {

    //Start timing now
    start[uid] = new Date().getTime();

}

exports.endTimer = function endTimer(functionName, uid) {

    //End timer
    var end = new Date().getTime();
    var time = end - start[uid];
    alert('Execution time for' + functionName + ': ' + time);
}

您必须在方法中生成此UID。