Zim
Zim

Reputation: 43

infinite loop recursively with node.js

I want to loop through some functions recursively so that after last function again it goes to first one and it goes forever. Can anyone please help me out on that? I also want to know if there is proper tutorial or something that will help me out to solve these problem in node js looping and flow controlling. I tried online tutorial though But not able to understand properly.

var util = require('util');
var async = require('async');
var SensorTag = require('./index');
var USE_READ = true;

SensorTag.discover(function(sensorTag) {
  console.log('discovered: ' + sensorTag);

  sensorTag.on('disconnect', function() {
    console.log('disconnected!');
    process.exit(0);
  });

  async.series([
  /*func 1*/
      function(callback) {
        console.log('connectAndSetUp');
        sensorTag.connectAndSetUp(callback);
      },
  /*func 2*/
      function(callback) {
        console.log('readDeviceName');
        sensorTag.readDeviceName(function(error, deviceName) {
          console.log('\tdevice name = ' + deviceName);
          callback();
        });
      },
   /*func 3*/
      function(callback) {
        console.log('readSystemId');
        sensorTag.readSystemId(function(error, systemId) {
          console.log('\tsystem id = ' + systemId);
          callback();
        });
      }
  })

})

When I executed it goes func 1 -> func 2 -> func 3 and then hangs. I need to recursively loop these again and again.

Edit code :I TRIED TO LOOP SOME FUNCTIONS, not all

var util = require('util');
var async = require('async');
var SensorTag = require('./index');
var USE_READ = true;

SensorTag.discover(function(sensorTag) {
  console.log('discovered: ' + sensorTag);

  sensorTag.on('disconnect', function() {
    console.log('disconnected!');
    process.exit(0);
  });

//function loop(){
  async.series([
  /*func 1*/
      function(callback) {
        console.log('connectAndSetUp');
        sensorTag.connectAndSetUp(callback);
      },
      function loop(callback){
        /*func 2*/
      function(callback) {
        console.log('readDeviceName');
        sensorTag.readDeviceName(function(error, deviceName) {
          console.log('\tdevice name = ' + deviceName);
          callback();
        });
      },
   /*func 3*/
      function(callback) {
        console.log('readSystemId');
        sensorTag.readSystemId(function(error, systemId) {
          console.log('\tsystem id = ' + systemId);
          callback();
        });
      },
      function(callback){
        loop()
        callback()
      }

      }
/*
      function(callback) {
        console.log('readDeviceName');
        sensorTag.readDeviceName(function(error, deviceName) {
          console.log('\tdevice name = ' + deviceName);
          callback();
        });
      },

      function(callback) {
        console.log('readSystemId');
        sensorTag.readSystemId(function(error, systemId) {
          console.log('\tsystem id = ' + systemId);
          callback();
        });
      },*/
      /*func 4*/
      loop();

  ]);
}



})

Upvotes: 1

Views: 1619

Answers (2)

Molda
Molda

Reputation: 5704

You could do

function loop(){
    async.series([
        //  your func here
    /*func 4*/
    , function(callback){
        loop()
        callback()
    }
}

Edit:

And then call it to start

loop();

Another edit:

Maybe there's no need for async at all

sensorTag.connectAndSetUp(readDevice);

function readDevice() {
   console.log('readDeviceName');
   sensorTag.readDeviceName(function(error, deviceName) {
       console.log('\tdevice name = ' + deviceName);
       readSystemId();
   });
}

function readSystemId() {
    console.log('readSystemId');
    sensorTag.readSystemId(function(error, systemId) {
        console.log('\tsystem id = ' + systemId);
        readDevice(); // start over again
    });
}

Upvotes: 0

Kangcor
Kangcor

Reputation: 1189

You can use the forever function from async, and inside this call async.series

Upvotes: 1

Related Questions