为什么无限循环会阻止兑现承诺?

时间:2018-08-23 18:00:01

标签: node.js asynchronous promise

我在下面的代码中遇到了一个奇怪的问题:在函数调用后添加一个无限循环将阻止在调用内部解析promise。

我不明白为什么,以及这个循环如何影响承诺行为

const second_call = () => {
    return new Promise((resolve, reject) => {
        console.log("Second call");
        resolve();
    });
}

const first_call = () => {
    console.log("First call");
    second_call().then(() => {
        console.log("First call, THEN");
    });
}

const main = () => {
    console.log("Started");
    first_call();
    //if if comment the while (true), all debug msgs will be displayed
    //if i uncomment the while (true), the msg "First call, THEN" will not be displayed
    while (true);
}

main();

1 个答案:

答案 0 :(得分:4)

您正在使EventLoop忙于该无限循环。节点是单线程的,并使用一组机制来处理并发操作。在这种情况下,您的诺言正在等待EventLoop可用以解决诺言结果,但是由于您正在发生无限的事情,因此诺言永远不会被获取和解决。

我建议您阅读一下EventLoop的工作原理以及NodeJS中的并发性。

这里有一些很好的参考文献: