【发布时间】:2023-03-21 07:12:02
【问题描述】:
我的程序有一个 main in nodejs,我需要使用在模块中计算的结果,但我没有正确的结果。
var myJSONClient = {
"nombre" : "<nombre_cliente>",
"intervalo" : [0,0]
};
var intervalo = gestionar.gestion(myJSONClient,vector_intervalo);
console.log("intervalo: "+intervalo); //return undefined
这是模块
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
}
});
setTimeout(function(){
console.log("pause");
},3000);
console.log(intervalo_final); //result not correct
return intervalo_final;
}
exports.gestion = gestion;
我知道节点执行我的返回而不等待我的函数结束,为此我看不到正确的结果,但我怎样才能强制我的程序等待我的函数结束? 我尝试使用 setTimeout 函数,但方法不正确。
【问题讨论】:
-
您的目标与您的代码不一致。
db.clientes.save()是异步方法,“waiting”是同步的。除了return,您还必须使用另一种方法。有关更多信息,请参阅stackoverflow.com/a/14220323。示例使用 Ajax,但概念仍然适用。