1

假设我们有这个:

function myMethod1() {
    ...
}

稍后在代码中:

myMethod1();
alert('myMethod1() was executed!');

我需要为警报设置超时,以便在 myMethod1() 执行后调用它。但是我怎么知道 setTimeout 函数的第二个参数的值呢?如何测量 myMethod1() 执行所需的时间?

MyMethod1() 有一个异步 ajax 调用。

4

3 回答 3

3

如果您的方法执行异步任务,通常会像这样传递回调函数:

function myMethod(cb)
{
    // some code, such as $.ajax
    $.ajax({
         url: 'example.com',
         complete: function() {
             // we're done, notify callback
             cb();
         }
    });
}

然后,cb在执行时像这样传入:

myMethod(function() {
    alert('method is done');
});
alert('method returned, but is still doing stuff in the background');

这是异步设计的口头禅;每个在后台执行任务的方法都会有某种方式通知回调函数其完成。


但是,如果该方法是同步的,您可以cb()在函数体的末尾调用,但保留您所拥有的会容易得多:

myMethod();
alert('method is done');
于 2012-10-19T07:29:41.070 回答
1

你不需要。按照您设置的方式,完成后将alert始终触发。 myMethod1()

于 2012-10-19T07:26:59.727 回答
0

您可以使用时间戳,精确到毫秒。

您将需要 2 个变量,一个用于保存开始时间,一个用于结束时间。并设置那些你想要计算的变量。所以

///下面的编辑版本使其成为全球性的..

把它放在你的 js 代码的顶部:

var ts_start;
var ts_stop;

把它放在你想开始计算时间的地方:

ts_start =new Date().getTime(); 

把它放在你想停止计算时间的地方:

ts_stop =new Date().getTime(); 

您可以通过在它们之间设置差异来提醒毫秒。

alert(ts_stop-ts_start);

或者把它推到一个变量中......

于 2012-10-19T07:33:37.967 回答