我有下面的功能,這是調用按鈕單擊,然後調用另一個函數內的定時器。爲什麼在最後調用回調函數以及如何測試函數?
下面是代碼:
<button id="starter">Start</button>
JS:
document.getElementById ("starter").addEventListener ("click", myFunction, false);
function myFunction() {
var start = new Date().getTime();
console.log("Start", start);
d3.timer(() => {
var timepassed = new Date().getTime() - start;
console.log("Time elapsed", timepassed);
helloBlah(timepassed);
if(timepassed >= 200) return true;
});
console.log(" Why am I triggered first rather than the timer?");
}
function helloBlah(e){
console.log("Hello Blah");
}
這裏是JSFiddle。
爲什麼d3計時器和裏面的函數晚於它下面的控制檯消息被調用?我如何在控制檯消息之前調用它,以及如何在Jasmine中爲這些類型的函數編寫測試?
定時器是異步和JavaScript是單線程的。這意味着回調將不會被調用,直到時間到,並且當前正在運行的線程完成。 – 4castle