Node.js 用于回调中的循环。舞台调度? //定义架构、模型、数据库连接等。。 http.createServer(函数(req,res){ //一些无关的东西。。 Model.find({name:regex}).exec(函数(err,results){ var localArray=[]; 对于(变量i=0,len=results.length;i
我的回调有一个for循环,它可能很长(results.length有时为100)Node.js 用于回调中的循环。舞台调度? //定义架构、模型、数据库连接等。。 http.createServer(函数(req,res){ //一些无关的东西。。 Model.find({name:regex}).exec(函数(err,results){ var localArray=[]; 对于(变量i=0,len=results.length;i,node.js,mongoose,Node.js,Mongoose,我的回调有一个for循环,它可能很长(results.length有时为100) 我写过阻塞代码吗?如果是,我怎样才能使它不阻塞?长话短说,答案是肯定的,它是阻塞。此循环运行时收到的任何请求都将排队。使用子进程解锁父代码。它要求您的机器是多核的(不是生成进程,而是高效的) 长话短说: JavaScript(以及节点)是单线程的。在这个问题的上下文中它意味着什么——当您的循环运行时,不能调用其他函数。 解除阻止它的唯一方法是使用子进程。你有两个选择,每个都有自己的优点和缺点 运行集群,这样当一个节
我写过阻塞代码吗?如果是,我怎样才能使它不阻塞?长话短说,答案是肯定的,它是阻塞。此循环运行时收到的任何请求都将排队。使用子进程解锁父代码。它要求您的机器是多核的(不是生成进程,而是高效的) 长话短说: JavaScript(以及节点)是单线程的。在这个问题的上下文中它意味着什么——当您的循环运行时,不能调用其他函数。 解除阻止它的唯一方法是使用子进程。你有两个选择,每个都有自己的优点和缺点
//defining schemas, models, db connections, etc..
http.createServer(function (req, res) {
// some irrelevant stuff..
Model.find({name : regex}).exec(function (err, results) {
var localArray = [];
for (var i = 0, len = results.length; i < len; ++i) {
localArray.push(results[i].name);
localArray.push(results[i].id);
}; // is this for loop blocking?
// some more irrelevant stuff..
});
}).listen(8080);
它是循环阻塞,但不阻塞I/O。如果您需要它,也可以。100个项目并不足以困扰循环或JS。感谢您的快速回复。:)您缺少响应。json(localArray);:)res.json()不是Express的一部分吗?
for (var i = results.length; i > 0; i--) {
//Do something
};