Return 模块 Return 中的值是否为空?

Return Value in Module Returns Null?

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

我怎样才能做到这一点。谢谢!

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);
}

您在每个函数中重新声明了 startend

这会用同名局部变量屏蔽全局变量。

endTimer 得到 undefined 作为 start.

的值

不要使用 var,除非您想创建局部范围的变量。

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

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

如果您在完成它们之前调用多个方法,这可能会出现新的错误,因为它们都将使用相同的 "start" 和 "end"。您可能想考虑在 "functionName" 和 "start".

之间使用某种映射

例如,您可以这样做:

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。