2016-07-21 9 views
1

特定のJSONオブジェクトを反復処理し、そこにオブジェクトごとにタスクを作成する必要があります。与えられたタスクはこのJSONオブジェクトからの情報も必要とします。私はこれらの情報を自分のタスクに渡して、実行時に利用できるようにすることができます。自分のタスクを実行パラメータをasync.jsタスクに渡す

var asyncScrapeTasks = []; 
var resources = JSON.parse(body); 
for(var i=0; i<resources.items.length; i++) 
{ 
    asyncScrapeTasks.push(function (callback) 
    { 
     console.log(resources.items[i].id); 
    }); 
} 

:私のタスクの配列を構築

async.parallelLimit(asyncScrapeTasks, 5, function() { 
    callback(null, "Done"); 
}); 

私の問題:今console.log(resources.items[i].id);戻り、未定義

、理にかなっています私、th eインデックスは関数が実行されている時点ではわかりませんが、私はどのように問題を解決できるのでしょうか。

+0

あなたのコードが不完全の一種です。あなたは何をしようとしているのより具体的な例を挙げることができますか? – slebetman

+0

@slebetmanはい私は可能な限り簡素化しようとしました。基本的に私は外部URLからjsonオブジェクトを取得し、このjsonファイルから特定の情報を取り出して自分のデータベースに格納したいと考えています。 – kentor

+0

しかし、あなたのコメントは '実行されている関数が実行されている時には知られていないので、この例に基づいて何の意味もありません。それが本当に起こっているなら、あなたが投稿した例は間違ったものです(問題を完全に取り除くために単純化しました) – slebetman

答えて

2

コメントを追加するには十分な評判がないので、私は答えとして書いています。ごめんなさい。

paralleLimitを使用する具体的な理由はありますか? async.jsには、コレクションを繰り返し実行して各アイテムに対して操作を実行できるそれぞれがあります。この関数は、iteratee関数をコレクション内の各項目に並列に適用します。 async.js each

あなたが操作を制限したい場合は、次にconsole.logは非同期関数ではないので、 async.js eachLimit

+0

私は、それぞれと並列の間に主な違いがあることを100%確信していませんか?私はちょうど私が外部WebサーバーへのURL呼び出しを介して情報を要求しているように私がやっていることである並列I/Oタスクを並列に開始していることを読んでいます。私はあなたのポイントは、私はresource.items.eachLimitを直接反復することができると思う、これは正しいですか?私はasync.jsを初めて利用しています – kentor

+0

はい、eachLimitを使用できます。iterateeでは残りのAPIを呼び出すことができます。 [asyc.jsドキュメンテーション](http://caolan.github.io/async/docs.html#)は、他の味を記述し、それぞれの例の下にソースのリンクも提供しました。 –

関連する問題