Javascript 使用node.js递归执行无限循环

Javascript 使用node.js递归执行无限循环,javascript,node.js,recursion,Javascript,Node.js,Recursion,我想递归地遍历一些函数,这样在最后一个函数之后,它会转到第一个函数,并且会一直循环下去。谁能帮我一下吗?我还想知道是否有合适的教程或其他东西可以帮助我解决NodeJS循环和流控制中的这些问题。虽然我尝试了在线教程,但无法正确理解 var util = require('util'); var async = require('async'); var SensorTag = require('./index'); var USE_READ = true; SensorTag.discover(

我想递归地遍历一些函数,这样在最后一个函数之后,它会转到第一个函数,并且会一直循环下去。谁能帮我一下吗?我还想知道是否有合适的教程或其他东西可以帮助我解决NodeJS循环和流控制中的这些问题。虽然我尝试了在线教程,但无法正确理解

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

})
当我执行时,它会运行func 1->func 2->func 3,然后挂起。我需要一次又一次地递归循环这些

编辑代码:我尝试循环一些函数,而不是所有函数

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.series中

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

然后叫它开始

loop();
另一次编辑:

也许根本不需要异步

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

也许这两个链接会有所帮助。生成器是Node>0.11和IO.js中的一项功能。也许你读过了。通过这种方法,您将避免回调的加载或使用异步库。当涉及到递归性IMHO at 2ality:at strongloop时,生成器非常精巧:您需要调用loop()首先在函数外部启动它,我可以做一些类似于以相同方式只循环特定函数的事情吗?>然后我需要做什么?我的意思是使用async.series下的循环再次调用某些特定函数是的,您可以。虽然我不确定你的确切意思,但一切皆有可能。每个循环可以处理不同的函数,具体取决于传入async的数组。请参见编辑。我希望像async.series下的第一个函数一样执行一次,并按照您的建议将rest函数放入循环函数中。我已经编辑了后面的部分,你能看看我使用的async.series([async.forever(/*func 1*/*func 2*/);]);但它显示:);^SyntaxError:意外标记;我认为正确的用法是:async.forever(async.series([func1,func2,func3]),但我想具体执行一些函数,而不是LL,因此我想知道是否可能。