私はリストを反復処理し、その後最初の関数の結果が見つかった場合にのみ2つの関数を呼び出すforループを実装しようとしています。javascript関数の呼び出しタイミング
問題は、2番目の関数(search.similar)がの結果を取得するのに時間がかかることがあるということです。
以下のコードでは、(search.locate)からの適切な出力はすべて正しいものの、myListの最後の要素の結果のみが(search.similar)関数から格納されます。
ie。 all_results = [[cat_res1,mouse_res2],[dog_res1,mouse_res2],[mouse_res1,mouse_res2]]
正しい結果を正しい順序で追加するにはどうすればよいですか?
ie。 all_results = [[cat_res1,cat_res2],[dog_res1,dog_res2],[mouse_res1,mouse_res2]]
var search = require('./search');
var myList = ['cat','dog','mouse'];
var all_results = [];
for (i=0; i<myList.length; i++){
/* locate function*/
search.locate(myList[i], function (err, searchResult){
if (err){
console.log("Error");
return;
}
if (!searchResult){
console.log("Cannot find it");
return;
}
/*similarity function*/
/* seems to take longer*/
search.similar(myList[i], function (err, similarResult){
if (err){
return;
}
if (!similarResult){
return;
}
var res1 = searchResult.data;
var res2 = similarResult.data;
/* append results to array*/
all_results.push([res1,res2]);
}
});
}
* search.locate *と* search.similar *によって返された値の何種類?メソッドは非同期ですか? – RobG
'push'を使わずに、適切にスコープされたインデックスに保存するそれぞれのインデックスに割り当てます(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example)変数。 – Bergi
@RobG彼らが何らかのオブジェクトであると仮定しましょう。 – chattrat423