NodeJS / SailsJS app数据库块

时间:2015-06-28 16:58:09

标签: node.js sails.js

了解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
            });

在第一次请求时,我几乎立即看到了回报。但是如果我再次请求它,我将需要等待所有记录输入之前它将再次返回我的视图。

这种阻止问题的常见做法是什么?

1 个答案:

答案 0 :(得分:3)

Node.js具有非阻塞的异步IO。

阅读下面的文章,它将帮助您重构代码 http://hueniverse.com/2011/06/29/the-style-of-non-blocking/

同时开始使用Promises来帮助您避免编写阻塞IO。