将具有延迟的异步for循环更改为同步javascript

时间:2018-09-25 17:09:22

标签: javascript node.js asynchronous delay synchronous

我有一个用于循环内部函数的异步代码,它有这样的延迟

    const timeout = ms => new Promise(res => setTimeout(res, ms))
    async function sayHai() {
      for (var i = 0; i < 100; i++) {
          await timeout(1000);
          console.log("Hai");
          if ( (i%5) == 4 ) await timeout(30000);
      }
    }
    
    sayHai();

我要生成的代码如下:

hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
delay 30 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec
hai delay 1 sec

我希望代码是同步的,因为我想在控制台上使用它,所以我需要代码按顺序执行

1 个答案:

答案 0 :(得分:1)

您要尝试的是使事情变得复杂的方法。可以通过简单的队列进行简化。有一个可以自我调用并在下一次迭代中使用超时的函数。

def is_number(s):
try:
    float(s)
    return True
except ValueError:
    return False

def StringLength():
    text = input('Enter:')
    if is_number(text):
        print ("python doesn't show length of integers")
    else :
        return(len(text))

#StringLength() #Remove the '#' at the start of the line to test the function