JavaScript循环仅运行一次

时间:2020-07-17 12:35:36

标签: javascript react-native

尝试使用手机的手电筒制作一个以文本为输入并将其转换为莫尔斯电码的本地本机应用。我可以得到翻译后的摩尔斯电码,但是当我尝试使用手电筒将其转换为光时,循环仅运行一次(短暂闪烁),然后退出。为什么会发生这种情况/我该如何解决?

var j;
for(j = 0; j < cipher.length; j++) {
    if(cipher[j] == '.') {
        Torch.switchState(true);
        setTimeout(function(){Torch.switchState(false)},200);
        setTimeout(function(){},200);
    }
    else if(cipher[j] == '-') {
        Torch.switchState(true);
        setTimeout(function(){Torch.switchState(false)},600);
        setTimeout(function(){},200);
    }
    else if(cipher[j] == ' ') {
        setTimeout(function(){},600);
    }
    else {
        setTimeout(function(){},1400);
    }
}

1 个答案:

答案 0 :(得分:1)

setTimeout()函数需要一个回调函数才能工作。我猜想,如果您将“ if”条件放入回调函数中,它将起作用。我在这里留下一个例子:

HTML:

<p>Live Example</p>
<button onclick="delayedAlert();">Show an alert box after two seconds</button>
<p></p>
<button onclick="clearAlert();">Cancel alert before it happens</button>

JavaScript:

var timeoutID;

function delayedAlert() {
  timeoutID = window.setTimeout(window.alert, 2*1000, 'That was really slow!');
}

function clearAlert() {
  window.clearTimeout(timeoutID);
}

另一种可能性是使用匿名函数来调用您的回调,但是这种解决方案要贵一些。示例:

var intervalID = setTimeout(function() { myFunc('one', 'two', 'three'); }, 1000);

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

中查看官方指南