node.js - 在JavaScript中,如何在异步回调函数中控制循环?
怪我咯
怪我咯 2017-04-10 17:02:18
0
2
242
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"},.....]
添加进数组后就需要循环执行这些数组函数
现在有个问题就是
当执行第一个函数的时候如果已经返回结果了,那么就不需要执行第二段函数了直接跳出循环
但是,执行返回的结果都是异步的.所以正如标题所言 如何在异步回调函数中控制循环
上述我是用递归的方法实现了循环的控制..
恳请各位大神指点迷津.

怪我咯
怪我咯

走同样的路,发现不同的人生

reply all (2)
Ty80

推荐async之类的库,里面有相关的API
正好解决你的问题。

另外,我之前写过一个库,专门解决这类问题:
https://github.com/manxisuo/JFlow
写着玩儿的,仅供参考。

    刘奇

    最简单的办法就是在第一个异步方法的回调函数里调用下一个方法。

      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!