Javascript 使用node.js递归执行无限循环
我想递归地遍历一些函数,这样在最后一个函数之后,它会转到第一个函数,并且会一直循环下去。谁能帮我一下吗?我还想知道是否有合适的教程或其他东西可以帮助我解决NodeJS循环和流控制中的这些问题。虽然我尝试了在线教程,但无法正确理解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(
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,因此我想知道是否可能。