javascript同步调用[重复]
Posted
技术标签:
【中文标题】javascript同步调用[重复]【英文标题】:javascript synchronous call [duplicate] 【发布时间】:2013-10-14 00:04:22 【问题描述】:用coffeescript写,但原理是一样的,我调用的是ps.list和ps.read(来自npm注册表中的pslook模块)。这些函数不返回结果,而是调用传递给它们的回调。 setTimeout 不是我想要做的,但在想办法解决这个问题时遇到了麻烦。有什么想法吗?不确定 IcedCoffeeScript 是否可以提供帮助?
ps = require 'pslook'
instances = []
ps.list (err, results) ->
if err then throw err
results.forEach (result) ->
ps.read result.pid, (err, process) ->
if err then throw err
instances.push process.cmdline
, 'fields': ps.ALL
, 'search': /^ssh/
setTimeout ->
console.dir instances
### Do lots more stuff here with the list of instances that I don't want to be nested within calls to ps.list / ps.read
, 500
【问题讨论】:
您正在处理等待所有异步任务完成工作的经典问题。看看这个:***.com/questions/10551499/…那里有很多好的解决方案。 【参考方案1】:一个等待所有回调被调用的简单计数器怎么样?
未经测试的示例:
ps.list (err, results) ->
if err then throw err
waitingFor = results.length
results.forEach (result) ->
ps.read result.pid, (err, process) ->
if err then throw err
instances.push process.cmdline
waitingFor -= 1
goOn(instances) if waitingFor == 0
, 'fields': ps.ALL
, 'search': /^ssh/
goOn (instances) ->
console.dir instances
【讨论】:
尚未对此进行测试,但逻辑似乎是合理的。谢谢以上是关于javascript同步调用[重复]的主要内容,如果未能解决你的问题,请参考以下文章
进阶学习5:JavaScript异步编程——同步模式异步模式调用栈工作线程消息队列事件循环回调函数
PHP Curl Timeout 导致 Javascript 客户端崩溃