了解NodeJS是一个单线程进程,但是如果我必须运行一个长进程数据库进程,我是否需要启动一个Web worker才能这样做? 例如,在sails JS app中,我可以调用数据库来创建记录,但是如果数据库调用需要时间来完成,它将阻止其他用户访问数据库。
以下是我试过的示例代码
var test = function(cb) {
for(i=0;i<10000;i++) {
Company.create({companyName:'Walter Jr'+i}).exec(cb);
}
}
test(function(err,result){
});
console.log("return to client");
return res.view('cargo/view',{
model:result
});
在第一次请求时,我几乎立即看到了回报。但是如果我再次请求它,我将需要等待所有记录输入之前它将再次返回我的视图。
这种阻止问题的常见做法是什么?
答案 0 :(得分:3)
Node.js具有非阻塞的异步IO。
阅读下面的文章,它将帮助您重构代码 http://hueniverse.com/2011/06/29/the-style-of-non-blocking/
同时开始使用Promises来帮助您避免编写阻塞IO。