2016-10-06 24 views
1

同期関数を実行して一定時間待機する非同期forループを実行しようとしています。私のコードは次のとおりです。待機用のJavaScript非同期

function loopExec (i,imax, execFunc,param1) { 
    execFunc(i,param1);//Launch synchronous function which takes some time 
    var y=i+1; 
    if (y < imax) { // if the counter < imax, call the loop function 
     setTimeout(function() { // call a 0.1s setTimeout when the loop is called 
      loopExec(y,imax, execFunc,param1);    // .. again which will trigger another call 
     }, 100); 
    } 
    else if(y==imax){ 
     anotherFunction(param1);// The loop is over, clean up and log 
    } 
} 

私が望む動作は次のとおりです。 execFuncは、(1) - >待っ100ミリ秒 - > execFunc2->、私が持っている行動がexecFunc1です... A bit like this

を待ちますexecFunc2などはすべて100ミリ秒間隔で起動し、前回の完了を待たずに、これらの関数がファイルとやり取りするときに読み書きの競合が発生します。

これは何か関係があるのか​​分かりませんが、electron/nodeJSを使用しています。

+0

あなたがしたいことを正確に実行します。 –

+0

* "私が持っている動作は、execFunc1、execFunc2などです。前回の完了を待つことなく、すべて100ミリ秒間隔で起動します。" *上記のコードはそれをしません。あなたがしたいと言ったことをします。 https://jsfiddle.net/23ta609b/ –

+0

約束の使い方を学ぶことができます。 – Aer0

答えて

-2

あなたは、このコードは、この

enter image description here

のような作品を何かをします実行する場合。

var i = 0; 
 
var imax = 10; 
 

 
function myFunction() { 
 
    console.log('balbla', i); 
 
    i+=1; 
 
    if(i !== imax) setTimeout(myFunction, 100); 
 
} 
 

 
setTimeout(myFunction, 100);

0

T.J。クラウダーは正しかった、エラーはこの関数ではなく、呼び出し元の関数である。

このコードは、予想されることを行います。

関連する問題