提问人:kavron 提问时间:9/1/2023 更新时间:9/1/2023 访问量:56
没有内置异步方法的异步 JavaScript [重复]
Asynchronous JavaScript without a built-in asynchronous method [duplicate]
问:
我看到的所有关于异步 JavaScript 的例子,当它们使用带有延迟的回调、promise 或 async/await 来伪造等待某些东西的例子时,请使用 setTimeout() 或 setInterval()。如果我没有收到回调、承诺或异步/等待一个 allready 内置异步代码怎么办?我想假装延迟,并且可以以同步方式使用 Date() 来完成。
这不仅仅是一个关于如何在不使用 setTimeout() 或 setInterval() 的情况下休眠/延迟的问题。这只是一个示例,希望在不调用内置异步方法的情况下查看异步 JavaScript 代码。
我的同步代码是:
const sleep = (milliseconds) => {
let t0 = Date.now();
const t1 = Date.now() + milliseconds;
console.log(`Sleeping ${milliseconds} milliseconds`);
while (t0 <= t1) {
t0 = Date.now();
}
};
const randomMilliseconds = () => {
return Math.round(Math.random() * 10000);
};
const returnElement = () => {
sleep(randomMilliseconds());
console.log(element);
};
const elements = [1, 2, 3, 4, 5];
function loopElements() {
for (element of elements) {
returnElement();
}
}
loopElements();
我阅读了有关异步函数的信息,并认为我可以使用 loopElements() 或 returnElement() 来做到这一点,但无法做到。此外,我看到的所有关于异步循环的示例都使用 setTimeout() 或使用其他内置的异步解决方案,例如从 API 获取数据。
这能做到吗?仅以一个简单的 Date() 示例为例。
答:
0赞
2 revsQuentin
#1
你不能。
使用异步功能时,将获得异步功能。
如果将自己限制为同步功能,则只能获得同步结果。
评论
0赞
kavron
9/1/2023
Callbacks、Promises、Async/Await 是异步功能。你的意思是没有内置的异步方法?您能否仅使用回调、承诺、async/await 而不是使用 setTimeout() 等内置方法,使用 Date() 使代码非阻塞/异步?
1赞
Quentin
9/1/2023
@kavron——我不知道你说的是什么意思,甚至不知道你用这句话指的是这个答案的哪一部分。
1赞
Bergi
9/1/2023
@kavron 并非所有回调都是异步的。回调只是异步代码使用的模式之一。
1赞
Bergi
9/1/2023
@kavron “你能用 Date() 使代码不阻塞/异步吗,只使用回调、承诺、异步/await,而不使用 setTimeout() 这样的内置方法?”——这篇文章的第一句话回答了这个问题。
上一个:如何使用PHP回发
评论
foo