私は値を計算し、計算が別の関数へのコールバックで値を返す関数を持っています。function-nodejsでの非同期マップ、再帰、コールバックのコンボ
状況がかなり混ざり始めています。ここでは、2つのループと再帰のネストがあります。
エラーは次のとおりです。uncaughtException: Callback was already called.
まず私は、コードのサンプルを書いてみましょう。
functionTest (array, function (err, result) {
if (err) {
nresponse.error(err);
} else {
nresponse.success(res, result);
}
);
function dependicies(array, callback) {
async.map(array, function(item, outerNext) {
async.map(item.members, function(value, innerNext){
dependicies(array, callback);
innerNext(); //should I write this after or before the recursion call?
outerNext(); //where should I call the outerNext?
});
}, function(err, result){
**
if(err){
callback(err);
}else{
callback(null, sthComputedInMap);
}
});
}
私はコメントで記述していますが、再帰呼び出しの前または後にinnerNextを記述する必要がありますか?この質問に加えて、私は2番目のマップの範囲の後にouterNextを呼び出す必要がありますか?
物事はかなり混乱しています。どのように私は解決するつもりですか?私はその文書を見ている。
**これは、最初のasync.map
の最後の場所ではありません。私はこの問題が、recursion
のeach
async.map
と呼ばれていると思います。私が望むのは、break
と呼ぶことです。
私は配列をループしようとしています。私は、ある文書の名前フィールドのリストを、それ自身の最後のグランドグランドの子孫から始めようとします。トレースする配列の構造は、このようなものです。
[
{id: 1, childrenIds: [3, 4, 5], name: ""},
{id: 3, childrenIds: [8, 5], name: ""},
{id: 21, childrenIds: [ 5], name: ""},
{id: 7, childrenIds: [5], name: ""},
{id: 5, childrenIds: [], name: ""}
]
最初のasync.mapは各ドキュメントを走査するためのもので、もう1つはその子配列を走査するためのものです。
私はそれが役立ちます:)
をあなたが言及している再帰の周りに頭を抱えるのは苦労し、多分もっと文脈が助けになるでしょうか? – OliverRadini
あなたのコードで再帰的なブレークはどこにありますか?依存関係()をもう一度呼び出さずに、次のコールバックを実行するような条件が必要であると言います。 –
@OliverRadini大丈夫ですよ。更新をお待ちください。 – mmu36478