想象一下,我有一个像这样的阻塞函数(程序将等待执行random_operations
:
var result = random_operations(arg1,arg2);
但现在我做到了:
function Op() {
events.EventEmitter.call(this);
this.get= function(arg1, arg2)
{
this.arg1 = arg1;
this.arg2 = arg2;
this.result = random_operations(this.arg1,this.arg2);
this.emit('done', this.result);
}
}
Op.prototype.__proto__ = events.EventEmitter.prototype;
var do_job = new Op();
do_job.on('done', function(resulted) {
console.log('done '+ resulted);
});
dojob.get(_arg1, _arg2);
像这样使用random_operations
意味着node.js不会阻塞?我试图了解如何非阻止node.js.
答案 0 :(得分:2)
node.js只进行非阻塞I / O(文件系统读/写,网络请求等)。 JavaScript仍然是单线程的,长时间运行的代码将阻止事件循环。
有一些方法可以推迟这些操作或在子进程中运行它们,但这有点复杂。
答案 1 :(得分:1)
你想使用Promise。如果传递一个应在操作完成后调用的函数,则可以模拟和理解它。通过调用setImmediate()
,您可以推迟执行该函数内的代码。