【发布时间】:2019-11-29 14:41:10
【问题描述】:
我想在没有await 关键字的情况下调用sleep() 函数。为了实现这一点,我尝试了另一个 wrapper-async 函数 sleepAsync(x, callback) 与回调,但它没有工作。
这是我的代码 -
function color() {
let string1 = "yellow yeelow";
console.log(string1);
let string2 = "blu glu";
console.log(string2);
let string3 = "green freen";
console.log(string3);
}
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms * 1000));
}
现在是正常工作的函数调用 -
async function fcall(loop = 2) {
for (let x = loop; x > 0; x--) {
color();
await sleep(2);
}
}
fcall(4);
上述调用方式,每次迭代等待2秒再继续。
下面的代码是 sleep() 不等待 2 秒的地方 -
async function sleepAsync(x, callback) {
callback();
await sleep(x);
}
function gcall(loop = 2) {
for (let x = loop; x > 0; x--) {
sleepAsync(2, color);
}
}
gcall(4);
这里可以做什么?我在哪里犯错了?
【问题讨论】:
-
睡眠不是JS程序设计的一部分,你想实现什么?
-
如果您想在循环的每个滴答声没有 async 关键字的情况下进行睡眠,我认为您可能必须将其重构为递归函数。但问题是为什么。
-
我想暂停执行几秒钟然后恢复。那么,如何在每次
sleep()调用之前不写await来实现它。 -
关于我为什么要这样做的问题,答案是——好奇。我对 JS 有点陌生,我想知道,有没有办法,所以这个问题。
-
async / await 可以被转译以使其在不支持此语法的浏览器上工作,所以是的,有一种方法。如果你想让它在旧版浏览器上运行,那么答案是“使用转译器”,如果你真的想学习如何手动重写它,那么试着去做,如果你遇到问题再回到这里在尝试这样做时。
标签: javascript node.js asynchronous async-await