gpt4 book ai didi

javascript - 这个用 JavaScript 构建的异步测试套件将如何终止?

转载 作者:行者123 更新时间:2023-11-30 05:46:03 26 4
gpt4 key购买 nike

以下是如何使用 Secrets of JavaScript Ninja 一书中的中央计时器控件 实现执行异步测试的测试套件的实现。乔恩·雷西格 (Jon Resig) 着。

      (function() {

var queue = [], paused = false; //#1

this.test = function(fn) { //#2
queue.push(fn);
runTest();
};

this.pause = function() { //#3
paused = true;
};

this.resume = function() { //#4
paused = false;
setTimeout(runTest, 1);
};

function runTest() { //#5
if (!paused && queue.length) {
queue.shift()();
if (!paused) resume();
}
}
})();

作者是这样设置 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>

我理解每个被插入队列函数都需要在异步调用之前调用pause()并且需要调用 resume() 异步调用结束后。但我看不出测试套件将如何自行结束。在最后一个测试结束时,pause 标志的值将为 false,因为最后一个测试会在完成自身后调用 resume(),然后继续调用 带有 setTimeout() 的 runTest()。在我看来就像一个无限循环。有人可以解释一下吗?

最佳答案

[…] resume in turn calls runTest() with a setTimeout().

是的,但是 runTest() 不会执行任何操作(因为 queue.length 将为 0,这是虚假的):没有运行新的测试,没有进一步调用 resume(),什么都没有。

关于javascript - 这个用 JavaScript 构建的异步测试套件将如何终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17911299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com