简体   繁体   中英

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();

  ]);
}



})

您可以使用async中forever函数 ,并在此调用async.series中

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
    });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM