目前正在创建一个简单的程序,用于从 25 倒数到 0。每次打印出当前值时,该程序应使用 Promise(.then()) 语法等待 5 秒。我是一个 JS 新手,只是不知道如何以这种特定方式做到这一点。非常感谢。
count = 25;
while (count >= 0) {
console.log(count).then(() => wait(7000));
count = count - 1;
}
Run Code Online (Sandbox Code Playgroud)
嗯,你不能仅仅依附于.then任何东西;你必须依附于任何东西。这只是一种可以链接到 Promise 的方法。console.log不返回 Promise,因此您不能.then直接链接到它。Promise 是异步运行的,这意味着一旦你触发 Promise,它就会在代码继续运行的同时完成它的任务;这就是 Promise 的意义所在。因此,您不能将一个循环放入 while 循环中并期望它在继续之前等待。
如果您想使用 Promise 来做到这一点,您可以使用 async/await 或构造一个无限的 Promise 链。我建议前者。
因此,您首先需要创建等待函数,该函数应返回一个在指定时间后解析的 Promise:
function wait(ms) {
return new Promise((resolve, reject) => setTimeout(resolve, ms));
}
Run Code Online (Sandbox Code Playgroud)
然后你使用一个异步函数,这样你就可以让它在每个循环中等待 Promise,尽管我建议使用 for 循环而不是 while,因为你有一组迭代次数:
async function DoLoop() {
for (let count = 25; count >= 0; --count) {
console.log(count);
await wait(7000);
}
}
Run Code Online (Sandbox Code Playgroud)
再次记住,根据定义,异步函数和 Promise 是异步的,这意味着如果您在某处调用现在异步的 DoLoop 函数,您的代码将继续运行该调用,而循环也同时运行 - - 调用 DoLoop 的代码不会等待它完成。
| 归档时间: |
|
| 查看次数: |
5120 次 |
| 最近记录: |