【问题标题】:How do I make a non-blocking Promise which loops forever and does stuff in Node JS [duplicate]如何制作一个永远循环并在 Node JS 中执行操作的非阻塞 Promise [重复]
【发布时间】:2019-12-07 01:16:41
【问题描述】:

如何创建一个永远循环并在节点 JS 中做一些事情的非阻塞 Promise。

什么是可行的替代方案?

let i = 0;
let p = new Promise(() => {
    while(true){i++;}
});
console.log("foo");

【问题讨论】:

  • 不要,使用事件循环。这就是 node.js 的真正好处。我不知道该怎么说。这样做会使 CPU 以 100% 的速度旋转并且是一种浪费。 IO 模式是 node.js 的核心优势。您能否更详细地描述为什么您认为这是您应该采用的方式,或者您的问题是什么?可能有更适合您的问题的模式。
  • 我无法真正解释我的问题。我只想知道有没有办法让promise反复做某事而不会阻塞。
  • while 循环将始终阻塞,无论您隐藏了多少承诺/回调/事件。寻找另一种循环机制。你到底想反复做什么?了解什么肯定会帮助缩小哪种工具最适合这项工作。

标签: javascript node.js asynchronous while-loop promise


【解决方案1】:

使用setTimeout

let i = 0;
function step() {
  i++;
  setTimeout(step, 0);
}
step();
console.log("foo");

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 2021-05-27
    • 2018-11-08
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多