node.js - Node.js 中的 Newbey 等待方式。为什么它不起作用?

标签 node.js

我尝试使用node.js,我发现有趣的(也许,只对我来说)事情 我写了一些这样的代码:

var flag = false;
doSomethingAsync().on('complete', function(data) {
    console.log('from callback');
    //do somestuff
    flag = true;
});
do{
   // there I want to wait for callback result
}while(!flag);

但我发现我没有看到回调的日志。为什么会出现这种情况? 我尝试更改 do...while 另一个循环,但观察到相同的行为
注意:我知道这对于 Node 中的某些内容来说是不合适的,但我想了解为什么会发生这种情况

最佳答案

Node 实现了一个协作 I/O 循环,仅在程序空闲(不执行任何计算)时才运行对是否必须执行 I/O 的检查; 协作部分由开发人员实现,通过执行阻塞计算来不阻塞 I/O 循环。

do-while 循环(本身不包含任何 I/O 操作)的问题在于,它会阻止程序进入空闲状态,从而有效地阻塞任何 I/O —包括由 doSomethingAsync 执行的操作 - 避免执行。

使用 setImmediate() 可以在一定程度上缓解这种情况,尽管这不能在 do-while 循环中使用。

关于node.js - Node.js 中的 Newbey 等待方式。为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17804888/

相关文章:

node.js - Heroku(Node 应用程序)中的临时文件会发生什么情况

node.js - 为什么在函数内部调用时 this 指向应用程序进程?

javascript - JS : Text to Image

node.js - Express + Passport.js : req. 用户未定义

javascript - 在 node.js 中使用来自 HTTP 请求的数据

node.js - Docker-compose 部署 redis 但 app.js 拒绝连接

javascript - 错误: Can't set headers after they are sent

javascript - 带有匿名/箭头函数回调的赋值速记

javascript - 异步任务完成后写入文件

javascript - 什么是websockets,我应该用什么js框架