我想调用 sleep()
函数,但前面不带 await
关键字。为了实现这一目标,我尝试使用另一个带有回调的 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);
这里可以做什么?我在哪里犯了错误?
最佳答案
如果您不想使用外部包,并且异步由于某种原因无法工作,sleep
包现在建议使用内置的 Atomics.wait(包含在 Node 中)在 Node 9.3 之后),如下所示:
function msleep(n) {
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n);
}
function sleep(n) {
msleep(n*1000);
}
我已经在生产中成功地使用了它。
来源:sleep
关于javascript - 有没有办法在没有await关键字的情况下调用sleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099454/