1

さまざまなパラメーターを持つ関数の配列を作成する方法を理解するのに問題があります。私はcoffeescriptとasyncを使用していますが、javascriptの理解に問題があると思います.

さまざまなタスクを持つ関数の配列を作成したいと考えています。

names = ['Jeff', 'Maria', 'Steve']
tasks = []

for name in names
  tasks.push (callback)=>
      @controller.get_person name, (person) =>
        callback(null, person)

async.parallel(tasks, cb)

問題は、タスクが Steve (常に配列の最後にあるタスク) で 3 回呼び出されることです。名前ごとに 1 つのタスクがあるようにするにはどうすればよいですか?

4

2 に答える 2

1

に変更for name in namesしてみてくださいnames.forEach (name)=>。後のスペースに注意してくださいforEach

names = ['Jeff', 'Maria', 'Steve']
tasks = []

names.forEach (name)=>
  tasks.push (callback)=>
      @controller.get_person name, (person) =>
        callback(null, person)

async.parallel(tasks, cb)
于 2013-02-05T20:38:50.123 に答える
1

実際、この特定のケースでは、おそらく async を使用する必要がありますmap

getPerson = (name, callback) =>
  @controller.get_person name, (person) ->
    callback(null, person)

async.map names, getPerson, (err, persons) ->
  // Do stuff with persons

@controller.get_personメソッドがエラーを最初のパラメーターとしてコールバックに渡すというノードの慣例に従っている場合、これで十分であることに注意してください。

async.map names, @controller.get_person, (err, persons) ->
  // Do stuff with persons

心に留めておくべきことがあります。

于 2013-02-06T11:55:00.830 に答える