簡體   English   中英

使用node.js遞歸無限循環

[英]infinite loop recursively with node.js

我想遞歸地遍歷一些函數,以便在最后一個函數之后再次到達第一個函數並永遠消失。 有人可以幫我嗎? 我還想知道是否有適當的教程或什么可以幫助我解決節點js循環和流控制中的這些問題。 我雖然嘗試了在線教程,但無法正確理解。

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

})

執行時,功能1->功能2->功能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中forever函數 ,並在此調用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
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM