如何在for循环JS中每秒打印一次值?

时间:2019-09-17 14:51:40

标签: javascript for-loop

我有代码:

function sleep(ms){
        return new Promise(function(resolve,reject){
            setTimeout(function(){
                resolve();
            },ms)
        });
    }
let str = 'abcdef';
for(let i=0;i<str.length;i++){
   sleep(1000);
   console.log(str[i]);
}

如何每1秒打印一次str[i]?这是代码示例,setInterval不能解决我的问题!

5 个答案:

答案 0 :(得分:0)

使用ES7,您可以将for循环包装在一个异步函数中,该函数等待sleep承诺得到解决。

function sleep(ms){
  return new Promise(function(resolve,reject){
setTimeout(resolve, ms)
  });
}
    
let str = 'abcdef';

async function loop(){
  for(let i = 0; i < str.length; i++) {
await sleep(1000);
console.log(str[i]);
  }
}

loop()

当然,您可以使此函数更灵活地传递要循环的字符串作为参数。

function sleep(ms){
  return new Promise(function(resolve,reject){
setTimeout(resolve, ms)
  });
}
    
async function logSlowly(string){
  for(let i = 0; i < string.length; i++) {
await sleep(1000);
console.log(string[i]);
  }
}

logSlowly('abcdef')

答案 1 :(得分:0)

    let str = 'abcdef';
    for(let i=0;i<str.length;i++){
       setTimeout(function() {
         console.log(str[i])
    }, 1000 * i)
    }

答案 2 :(得分:0)

const str = 'mystring';
const printEveryOneSecond = (s) => {
  for (let i = 0; i < s.length; i++) {
      setTimeout( () =>{
        console.log(s[i])
      }, i * 1000)
    }
}
printEveryOneSecond(str);

答案 3 :(得分:0)

我在想解决方案,您做了什么。我想解决您的问题的是以下代码段:

(function () {
   let str = 'abcdef';
   let timing = 0;
   let printCharWithDelay = (character, timing) => {
      setTimeout(function() {
         console.log(character);
      }, timing);
   };
   
   for(let i = 0; i < str.length; i++) {
      printCharWithDelay(str[i], timing);
      timing += 1000;
   }
})();

我已经完全重组了代码,如果您运行它,您将获得所需的结果。

基本上,代码会延迟计算出的毫秒数打印通过的字符。显然,它可以简化,但这是了解setTimeout在这种情况下的行为的一个很好的例子。

要进一步了解窗口setTimeout()方法,请点击链接here

答案 4 :(得分:0)

尝试通过等待在前面打电话入睡。 像这样:

await sleep(1000);

请使用搜索功能,以便发布重复项 here

要使用严格的功能,请查看此链接here

上的文档