2016-08-10 28 views
2

私はJavascriptで3つの関数を持っています。 function1はarray-array_message 'にデータを挿入し、function2は' array_message 'をcsvファイルにエクスポートします。関数3は、リスト内のすべての要素を持つこれら2つの関数を呼び出します。Javascriptループ内のコールバック関数

function2はfunction1と同時に実行されるため、 'array_message'を入力する時間がないため、エクスポートされたファイルは常に空になります。

function1がこの 'for'ループで実行されているときは誰でも関数2を呼び出す方法を教えてください。別のコールバック関数ですか?

function function3(){ 
     for (var i=0; i<list.length;i++){ 
     console.log(list[i]); 
     function1(list[i]) 
     function2(list[i]+'.csv',array_message) 
     } 
    } 
+0

間違ったアプローチを。あなたのすべての機能があなたの問題の源泉であるグローバルな状況を取得して使用するのに苦労しているようです。あなたはそれらを純粋にすることができます。純粋な関数は入力を受け取り、出力を生成し、副作用がないので、 'function1'はその' list [i] '項目を受け入れ、後で' function2'が消費する 'array_message'オブジェクトを生成する必要があります。もっと簡単に。 – vlaz

答えて

2

あなたはPromises(preferrable IMO)またはコールバックは、これを達成するために利用することができる:

function function1(item) { 
    return new Promise(function(resolve, reject) { 
     // do operations 
     if (operationSuccessful) { 
      resolve(dataFromOperation); 
     } else { 
      reject(errorFromOperation); 
     } 
    }); 
} 

function function3() { 
    for (var i=0; i<list.length;i++) { 
     // only call function2 after function1 is complete 
     function1(item[i]).then(function(responseData) { 
      function2(responseData); 
     }).catch(function(error) { 
      console.error("Problem in function1") 
     }); 
    } 
} 
関連する問題