javascript - callback inside of socket io -


i having problem socket when executing data takes long time. example:

socket.on('start', function(input){     var output = foo(input); //taking long time data, networking etc.     console.log("this ending", output);     socket.emit('end',output); }); 

it seems if takes long time foo(input) execute, nodejs emit output first while still null.

how can make sure finish executing first before emit?

i modified

    socket.on('several',function(meteridarray){     console.log("i have receiever meteridarray",meteridarray);     meterids = meteridarray.meterids;     foo(meterids,function(datasets){         console.log("this datasets",datasets);         socket.emit('datasets',datasets);     });  }); 

and modified foo this

function foo(meterids,callback){ //this meant long call.  var datasets = [];     (var = meterids.length - 1; >= 0; i--) {         datapoint.setmeterid(meterids[i],function(err, results){             datapoint.dorequest(null, function(err, results){                 var dataafter = [];                 var step = 1;                 for(var = 0; < results.timeseries.length; = + step) {                     var item = results.timeseries[i];                     for(date in item) {                         dataafter.push({x: date, y: item[date]})                     }                 }                 console.log("this data after",dataafter);                 datasets.push(dataafter);             });         });     } callback(datasets); } 

but still same effect: socket still emitting null. sorry if naive bug. thanks!

if can modify foo need this:

socket.on('start', function(input){   foo(input, function (output) {     console.log("this ending", output)     socket.emit('end', output)   )) }) 

you need fire callback when server request returns.

update: can't use loop i keep track of how many requests have been made, have keep track once request returns.

function foo(meterids, callback) {   var datasets = [];   var numberofrequeststomake = meterids.length;   (var = meterids.length - 1; >= 0; i--) {     datapoint.setmeterid(meterids[i],function(err, results){       datapoint.dorequest(null, function(err, results){         var dataafter = [];         var step = 1;         for(var = 0; < results.timeseries.length; = + step) {           var item = results.timeseries[i];           for(var date in item) {             dataafter.push({x: date, y: item[date]})           }         }         console.log("this data after",dataafter);         datasets.push(dataafter);          numberofrequeststomake--;          // if final return server         if (numberofrequeststomake === 0) {           callback(datasets)         }       });     });   } } 

promises awesome though


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -