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);
}
您在每个函数中重新声明了 start
和 end
。
这会用同名局部变量屏蔽全局变量。
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。
我正在尝试创建一个可以实现计时器的模块 (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);
}
您在每个函数中重新声明了 start
和 end
。
这会用同名局部变量屏蔽全局变量。
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。