javascript - 打印出值后等待 5 秒的 Promise 方法
问题描述
目前正在创建一个从 25 倒数到 0 的简单程序。每次打印出当前值时,程序应该使用 Promise(.then()) 语法等待 5 秒。我是 JS 新手,只是不知道如何以这种特定方式进行操作。非常感谢。
count = 25;
while (count >= 0) {
console.log(count).then(() => wait(7000));
count = count - 1;
}
解决方案
好吧,你不能只依附于.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 的代码不会等待它完成。
推荐阅读
- azure - Azure VM 的关闭有时会挂起几分钟
- swift - 2D屏幕到3D空间投影,如何将(x,y)扩展到(x,y,z,w)到viewprojection矩阵的多个逆?
- javascript - 有没有办法在所有浏览器上播放 mkv 视频而无需在客户端安装任何插件?
- batch-file - PuTTY -m 命令选项在 Windows 7 上因“无法打开 ... 文件”而失败
- sql - 来自查询执行计划的查询优化
- google-chrome-extension - “广泛的主机权限”错误,尽管我的主机权限很窄
- python - 将列表中的负索引设置为零
- python - 将上下文传递给响应并在视图中使用它
- ios - 使用属性标题时找不到自定义字体
- ios - 如何使用 ObjectMapper 映射字典与动态键?