いくつかの基本的な非同期プログラミングの概念に頭を悩ませようとしています。
今のところ、基本的に 2 つの関数があります。とりあえず、getOne と getAll と呼びましょう。getAll は基本的に一連のループを実行し、getOne を呼び出して、それをハッシュにマップし、チェーンに送り返します。これは基本的に、コーヒースクリプトで私が持っているものです:
getOne = (key, callback) ->
try
# find object referenced by key
object = "blah blah"
callback(null, object)
catch(error)
callback(error, null)
getAll = (keys, callback) ->
results = {}
try
count = keys.length
for i, key of keys
count--
getOne key, (err, result) ->
if(err)
# do something
else
results[key] = result
if count is 0
callback "", results
catch
callback error, results
上記のコードは基本的に、キーが期待されるデータと一致するとは限らないハッシュを出力します。これは、for ループが非同期処理される方法で期待されます。ただし、ループをブロックせず、並列処理を維持する代わりに、すべてを連続して処理するソリューションを思い付くことができないようです。
私は何が欠けていますか?