javascript promise setTimeout

标签 javascript loops settimeout

我目前正在为一个网站制作老虎机效果。我使用了一个通过 setTimeout() 多次调用自身的函数。我使用 setTimeout() 而不是简单的循环,因为我需要减慢效果。这就是毫秒派上用场的地方。在此之后我想用不同的参数触发相同的功能。所以我需要知道第一个“循环”何时完成。我为此尝试了 promise 。没有成功。

为了简化问题,有人能告诉我为什么下面的代码没有触发 .then() 方法吗?我是所有这些编程的新手,这是我在这里的第一个问题。我希望这不是我在这里犯的明显错误。

function countDown(i) {
  return promise = new Promise( (resolve, reject) => {

    console.log(i--);

    if (i > 0) {
      setTimeout( () => {
        countDown(i);
      }, 1000);
    } else {
      resolve('counter finished:');
    }

  });

}

let counter = countDown(10);
counter.then( (msg) => {
  console.log(msg);
});

最佳答案

您只需要在递归调用后解决 promise ,如下所示:

function countDown(i) {
  return promise = new Promise( (resolve, reject) => {

    console.log(i--);

    if (i > 0) {
      setTimeout( () => {
        countDown(i).then(resolve);
      }, 1000);
    } else {
      resolve('counter finished:');
    }

  });

}

let counter = countDown(10);
counter.then( (msg) => {
  console.log(msg);
});

关于javascript promise setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46963971/

相关文章:

javascript - 如果丢失调用对象,如何终止 setInterval()/setTimeout()?

jquery - 如何创建一个简单的 setTimeout 循环

javascript - 测试固定电话号码模式的最快方法

javascript - jquery 对话框多次打开

javascript - 使用append()的简单循环不起作用

javascript - 使用 for 循环比较数组中的数字

javascript - 如何在html中自动导航页面?

javascript - 使 div 仅固定在另一个可滚动的 div 中

javascript - FastAPI 没有将 cookie 返回给 React 前端

c++ - 使用do while循环验证输入