我正在尝试创建一个可以实现计时器的模块(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);
}
答案 0 :(得分:3)
您已在每个功能中重新声明start
和end
。
使用同名的局部变量屏蔽全局变量。
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。