首页 > 解决方案 > 打印出值后等待 5 秒的 Promise 方法

问题描述

目前正在创建一个从 25 倒数到 0 的简单程序。每次打印出当前值时,程序应该使用 Promise(.then()) 语法等待 5 秒。我是 JS 新手,只是不知道如何以这种特定方式进行操作。非常感谢。

count = 25;
while (count >= 0) {
  console.log(count).then(() => wait(7000));
  count = count - 1;
}

标签: javascript

解决方案


好吧,你不能只依附于.then任何东西;这只是一种可以链接到 Promises 的方法。console.log不返回 Promise,因此您不能.then直接链接到它。并且 Promises 是异步运行的,这意味着一旦你触发了 Promise,它就会在代码继续运行的同时做它的事情;这就是 Promises 的重点。因此,您不能将一个放在 while 循环中并期望它在继续之前等待。

如果你想用 Promise 来做这件事,你可以使用 async/await 或者构造一个无限的 Promise 链。我建议前者。

所以你首先需要创建你的等待函数,它应该返回一个在指定时间后解析的 Promise:

function wait(ms) {
  return new Promise((resolve, reject) => setTimeout(resolve, ms));
}

然后你使用一个异步函数,这样你就可以让它在每个循环中等待 Promise,尽管我建议使用 for 循环而不是 while,因为你有一组迭代次数:

async function DoLoop() {
  for (let count = 25; count >= 0; --count) {
    console.log(count);
    await wait(7000);
  }
}

再次记住,根据定义,异步函数和 Promises 是异步的,这意味着如果您在某处调用 now-async DoLoop 函数,您的代码将继续在该调用之后运行,同时循环也在同时运行 - - 调用 DoLoop 的代码不会等待它完成。


推荐阅读