var SearchJavaStrate={
findCil:function(cb){
child_process.exec("java -XshowSettings:properties",function(error, stdout, stderr){
var java_env=stderr.toString().match(/sun.boot.library.path.+/)[0];
if(java_env){
java_env=path.join(java_env.match(/=.+/)[0].substr(1),"/javaw.exe")
console.log(15,java_env)
cb(false,java_env)
}else{
cb(true)
}
})
},
find32Dir:function(cb){
if(fs.existsSync("c:/Program Files/java/")){
var java_env='c:/Program Files/java/'
var java_dir=fs.readdirSync(java_env)[0]
if(java_dir.length>0||java_dir){
var java_env=path.join(java_env,java_dir,"/bin/javaw.exe")
cb(false,java_env)
}else{
cb(true)
}
}
},
find64Dir:function(cb){
if(fs.existsSync("c:/Program Files (x86)/java/")){
var java_env='c:/Program Files (x86)/java/'
var java_dir=fs.readdirSync(java_env)[0]
if(java_dir.length>0||java_dir){
var java_env=path.join(java_env,java_dir,"/bin/javaw.exe")
cb(false,java_env)
}else{
cb(true)
}
}
}
}
var SearchJavaContext=function(){
var cache=[];
var add=function(strate){
strate.forEach(function(e,i){
cache.push(function(cb){
SearchJavaStrate[e](cb)
})
})
}
return {
init:function(strate,cb){
if(strate&&strate.length>1){
add(strate)
console.log(cache)
var len=cache.length;
var i=0;
function funcFor(fn){
console.log(fn.toString())
fn(function(next,data){
if(next){
i++;
if(i>len){
cb(null)
}
arguments.callee(cache[i])
}else{
cb(data)
}
})
}
funcFor(cache[i])
}
}
}
}()
SearchJavaContext.init(["findCil","find64Dir","find32Dir"],function(data){
console.log("89",data)
if(data){
event.sender.send("searchJave:result",data)
}
})
这里有一段代码 其中SearchJavaStrate下的所有属性都是函数,然后在SearchJavaContext的init方法中把这堆属性添加进了一个数组 数组内容大致为function(cb){SearchJavaStrate["findCil"},.....]
添加进数组后就需要循环执行这些数组函数
现在有个问题就是
当执行第一个函数的时候如果已经返回结果了,那么就不需要执行第二段函数了直接跳出循环
但是,执行返回的结果都是异步的.所以正如标题所言 如何在异步回调函数中控制循环
上述我是用递归的方法实现了循环的控制..
恳请各位大神指点迷津.