在 C# 中,有 Task.Run(() => {}) 方法,可以轻松异步运行代码。 JavaScript 中有等效的方法吗?
到目前为止,我得到的关闭是 nested usage of setTimeout like this:
setTimeout(async function logStatus() {
const result = await someNetworkCall();
console.log(result);
setTimeout(() => {
logStatus();
}, 1000);
}, 1000);
上面的代码只是每秒调用一次网络服务并将结果记录到控制台。但是,我担心由于让 logStatus 方法从自身内部调用 logStatus 的递归方式,最终会出现 stackoverflow 异常。
有更好的方法吗?
最佳答案
虽然我不是一个 JS 专家(甚至精通 JS),但你应该能够使用立即调用的函数表达式,并且 Promise 总是立即执行来实现这一点,这一点喜欢
// we want/ need a promise based sleep function
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// now our actual continuously running function
// this is a IIFE: https://flaviocopes.com/javascript-iife/
(async () => {
while (true) {
const result = await someNetworkCall();
console.log(result);
await sleep(1000);
}
})()
您可能想要实现一些功能,以便可以取消 while (true)
循环,但我会将其留给您
相当于 Task.Run(async () => ... )
将是 (async () => ... )()
我可以看出,C# Task
的等价物是 Promise
我创建了一个 jsfiddle,您可以在浏览器中运行,演示核心概念 here (别担心,我用 for 循环替换了 while true 循环,该循环达到 10,因此它实际上停止运行)
关于javascript - JavaScript 中是否有等效的 Task.Run ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72864901/