2016-08-06 3 views
0

複数のget要求から配列を組み合わせて作成した新しい配列を返そうとしています。新しい配列はasync.eachSeriesasync library関数内で正しく戻りますが、親関数は未定義を返します。関数内のasync.eachSeriesループ内の複数のget要求からの応答を返すにはどうすればいいですか?

私の理解では、親関数内の戻り値はasync.eachSeries()(完了する前に)と同時に実行され、親関数はundefinedを返します。

var array_strings = [ “someUrl”, “someUrl”, “someUrl” ] 

function get_forEachUrlString(base_url, array_strings) { 
    … 
    var combinedArray = []; 
    var mergedArray = []; 
    … 
    async.eachSeries(array_strings, function(item, done) { 
     … 
     $.get(bas_url+item, function(data) { 
      … 
      combinedArray.push(data) 
      done(); // stopping the async looping 
      mergedArray = [].concat.apply([], combinedArray); // Merging the array of combined arrays 
     }); 
    }, function(err) { 
     if (err) { 
      throw err; 
     } 
     console.log("All requests are done"); 
     console.log(mergedArray); // logs correct array 
     return mergedArray 
    }); 
    console.log(mergedArray); // logs [] empty array 
    return mergedArray // Hoping this would return the newly created mergedArray 
} 

get_forEachUrlString(“someBaseUrl”, array_strings) // Attempting to return mergedArray 

// this function tries to call the mergedArray, but returns undefined 
function initialRender() { 
    … 
    console.log(merged) // returns undefined 
} 

私はasync.eachSeries機能によって生成される値を返すために、親機能get_forEachUrlString()を取得する方法を探してきました。私はコールバックを実行する必要があると信じていますが、いくつかの異なる組み合わせを試した後、私はまだ困惑しています。

私が作成した新しい配列mergedArrayは、どのようにして関数get_forEachUrlString()から戻ることができますか?

EDIT:get_forEachUrlString()の戻り値をinitialRender()にコールしようとしています。私の答えでこれをどのように修正したかを見てください。

+0

'get_forEachUrlString'が値を返すようにする方法がありません - コールバックを使ってみてください –

+0

@Jaromanda、そのコールバックをどうすればいいですか?彼らはまだ私のために少し混乱している、と私はこの1つの周りに私の頭を包むように見えることはできません。 – Jason

答えて

0

いくつかの試行錯誤の後、私はこの作業を行うことができました。任意の数のコールバックを配置しようとしていましたが、実際には、initialRender()関数をget_forEachUrlString()関数内に置き、新しいmergedArray値をinitialRender()関数に渡しました。

したがって、適切な設定は次のようになります。

function get_forEachUrlString(base_url, array_strings) { 
    … 
    async.eachSeries(array_strings, function(item, done) { 
     … 
    }, function(err) { 
     … 
     mergedArray = [].concat.apply([], combinedArray); 
     initialRender(mergedArray); 
    }); 
} 

get_forEachUrlString(“someBaseUrl”, array_strings) 

次に、initialRender()は必要なものを返します。

関連する問題