当执行数据需要很长的时间我有插座有问题。 例如:回调插座的内部IO
socket.on('start', function(input){
var output = foo(input); //taking a very long time to get data, networking etc.
console.log("this is ending", output);
socket.emit('end',output);
});
看来,如果花费很长的时间foo的(输入)以执行,将的NodeJS实际上第一发射输出而它仍然是空。
我怎样才能确保执行完第一次发出过吗?
我修改这样
socket.on('several',function(meterIDArray){
console.log("I have receiever meterIDArray",meterIDArray);
meterIDs = meterIDArray.meterIDs;
foo(meterIDs,function(Datasets){
console.log("This is datasets",Datasets);
socket.emit('Datasets',Datasets);
});
});
而且我修改了富这样
function foo(meterIDs,callback){
//this is what I meant by a long call.
var Datasets = [];
for (var i = meterIDs.length - 1; i >= 0; i--) {
datapoint.setMeterID(meterIDs[i],function(err, results){
datapoint.doRequest(null, function(err, results){
var dataAfter = [];
var step = 1;
for(var i = 0; i < results.timeseries.length; i = i + step) {
var item = results.timeseries[i];
for(date in item) {
dataAfter.push({x: date, y: item[date]})
}
}
console.log("This is data After",dataAfter);
Datasets.push(dataAfter);
});
});
}
callback(Datasets);
}
但它仍然是一样的效果:插座仍在发射空。 对不起,如果这是一个天真的错误。 谢谢!
可以修改'foo'添加一个回调函数? – azium
你的意思是foo(input,callback)?当然,我会尝试。我实际上有一个for循环代替foo()。也许我可以移动所有的代码并编写一个新的函数。 – Emma
你将不得不显示的代码为'富()'函数为我们更具体如何解决它的建议。如果它执行异步事件,那么它必须采取一个回调,当它完成时调用,或者返回一个在完成时解决的promise。这就是异步编程在nodejs中的工作方式。 – jfriend00