
我試過的
let intervalTimer = null;
function startTimer(callback, interval) {
// Write the code that goes here
intervalTimer = setInterval(() => {
let obj = {number:0};
if(callback(obj)) {
} else {
}
},interval);
}
function callback(obj) {
obj.number
console.log(obj.number);
return obj.number < 5;
}
到目前為止,這是我的代碼 - 但我只設法得到 1。之后,eecution 不再繼續。我該如何解決這個問題?
uj5u.com熱心網友回復:
將let obj = {number:0};函式閉包放在外面,就像你對let intervalTimer. 因為你在回呼中添加零,它會增加 1,然后它會被設定回 0。
uj5u.com熱心網友回復:
在原始版本中,obj每次間隔觸發時都會重新創建,因此它永遠不會前進。
這也將間隔 ID 回傳給呼叫者,允許根據要求使用多個計時器。
function startTimer(callback, interval) {
let obj = {number:0};
const intervalTimer = setInterval(() => {
if(!callback(obj)) {
clearInterval(intervalTimer)
}
},interval)
return intervalTimer
}
function callback(obj) {
obj.number
console.log(obj.number)
return obj.number < 5
}
const timer1 = startTimer(callback, 500)
const timer2 = startTimer(callback, 750)
uj5u.com熱心網友回復:
下面演示兩個定時器的并發運行。每個計時器回呼將根據其counter變數記錄一個值。第一個定時器以 500 毫秒的間隔運行,第二個定時器以 1000 毫秒的間隔運行。
請注意邏輯 OR 運算子 ( ||) 的使用:
如果運算子的左側評估為真值(即我們應該繼續),則不評估右側(定時器取消)。
如果運算子的左側計算為假值,則計算右側(取消),并且計時器停止。
const startTimer = (callback, interval = 1000) => {
let counter = 1
const tick = () =>
(callback(counter ) || clearInterval(intervalId))
const intervalId = setInterval(tick, interval)
}
const countToTen = (counter) => {
console.log(counter)
return counter < 10
}
const abcs = (counter) => {
// 65 is the start of the Latin Alphabet
console.log(String.fromCharCode(64 counter))
return counter < 10
}
startTimer(countToTen, 500)
startTimer(abcs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488640.html
標籤:javascript 算法
