Node.js MongoJS中没有阻塞操作
我必须做一个运算,为我计算一些东西,但我不能使用它的结果,因为我总是处于等待状态,事实上,在我的终端中,我的程序一直在执行,直到我输入ctrl+C 我的程序有一个main-in-nodejs,我需要使用在模块中计算的结果Node.js MongoJS中没有阻塞操作,node.js,mongodb,mongojs,Node.js,Mongodb,Mongojs,我必须做一个运算,为我计算一些东西,但我不能使用它的结果,因为我总是处于等待状态,事实上,在我的终端中,我的程序一直在执行,直到我输入ctrl+C 我的程序有一个main-in-nodejs,我需要使用在模块中计算的结果 var myJSONClient = { "nombre" : "<nombre_cliente>", "intervalo" : [0,0] }; var intervalo = gestionar.gestion(myJSONClie
var myJSONClient = {
"nombre" : "<nombre_cliente>",
"intervalo" : [0,0]
};
var intervalo = gestionar.gestion(myJSONClient,vector_intervalo);
console.log("intervalo: "+intervalo); //return undefined
欢迎来到异步世界!:) 首先,您没有在节点中执行阻塞操作。实际上,节点中的网络是完全异步的 您声明的
console.log
部分有效,这是因为db.clientes.save
调用的回调函数。该回调表示mongo保存已完成
什么是异步网络?这意味着您的保存将在将来某个时候处理。脚本不会等待响应来继续代码。save调用之后的
console.log
将在到达后立即执行
至于脚本的“等待状态”,它永远不会结束,您应该看看。答案就在这里
var gestion = function(myJSON,vector_intervalo) {
var dburl = 'localhost/mongoapp';
var collection = ['clientes'];
var db = require('mongojs').connect(dburl, collection );
var intervalo_final;
function cliente(nombre, intervalo){
this.nombre = nombre;
this.intervalo = intervalo;
}
var cliente1 = new cliente(myJSON.nombre,myJSON.intervalo);
db.clientes.save(cliente1, function(err, saveCliente){
if (err || !saveCliente) console.log("Client "+cliente1.nombre+" not saved Error: "+err);
else console.log("Client "+saveCliente.nombre+" saved");
intervalo_final = calculate(vector_intervalo);
console.log(intervalo_final); //here I can see the right content of the variable intervalo_final
});
console.log(intervalo_final); //this is not executed
return intervalo_final;
}
exports.gestion = gestion;