这个内置JavaScript的异步测试套件将如何终止?

这个内置JavaScript的异步测试套件将如何终止?,javascript,asynchronous,timer,Javascript,Asynchronous,Timer,下面是如何实现一个测试套件的实现,该套件使用Jon Resig的书中的中央计时器控件执行异步测试。 这就是作者如何将test()函数设置为其速度的方法: test(function() { pause(); setTimeout(function() { assert(true, "First test completed"); resume(); }, 100); });

下面是如何实现一个测试套件的实现,该套件使用Jon Resig的书中的中央计时器控件执行异步测试。

这就是作者如何将
test()
函数设置为其速度的方法:

      test(function() {
        pause();
        setTimeout(function() {
          assert(true, "First test completed");
          resume();
        }, 100);
      });

      test(function() {
        pause();
        setTimeout(function() {
          assert(true, "Second test completed");
          resume();
        }, 200);
      });

    </script>
测试(函数(){
暂停();
setTimeout(函数(){
断言(正确,“第一次测试完成”);
恢复();
}, 100);
});
测试(函数(){
暂停();
setTimeout(函数(){
断言(正确,“第二次测试完成”);
恢复();
}, 200);
});
我知道,被推入队列的每个函数都需要在异步调用之前调用
pause()
,并且需要在异步调用结束后调用
resume()
。 但我看不到测试套件将如何结束。在最后一个测试结束时,
pause
标志的值将为false,因为最后一个测试将在完成自身后调用
resume()
,然后依次使用
setTimeout()调用
runTest()
。在我看来就像一个无限循环。谁能解释一下吗

[…]使用
setTimeout()
依次恢复调用
runTest()


是的,但是
runTest()
没有做任何事情(因为
队列。长度
将是
0
,这是错误的):没有运行新的测试,没有进一步调用
resume()
,什么都没有。

但是如果
(!暂停)resume()
将再次调用
resume()
。不是吗?@Geek:不是,因为它嵌套在
if(!paused&&queue.length)
块中。啊,我明白了。我不知道我怎么会忽视这一点。
      test(function() {
        pause();
        setTimeout(function() {
          assert(true, "First test completed");
          resume();
        }, 100);
      });

      test(function() {
        pause();
        setTimeout(function() {
          assert(true, "Second test completed");
          resume();
        }, 200);
      });

    </script>