0

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
4

1 に答える 1

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
于 2013-10-08T10:28:17.653 に答える