我尝试使用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/