4

コードでコメントされているように、else ifafterを確認する前に待機する必要がありwriteFile(lFileData);ます。これを達成する方法は?

for(var i=0;i<mLocalStorageCount;i++)
        {

            if(i <= 1)
            {

                writeFile(lFileData); //This action takes a lot of time with its call backs. I need a wait here. 

            }

            else if(i > 1 && i <=3)
            {
                     someOtherfun()

            }
4

6 に答える 6

5
if(i <= 1){
    writeFile(lFileData); 
    doAdelay();
};

と:

function doAdelay(){
    setTimeout(function(){return true;},30000);
};

お役に立てれば

于 2012-11-24T10:44:02.347 に答える
2

elseif関数で設定間隔を使用できます

setTimeout(function,3000);
于 2012-11-08T07:50:15.200 に答える
1

コードを書き直して、実行したい部分を独自の関数で遅延させることができます。そこから、performFunctionXAfterDelay()を呼び出してその関数を呼び出します。

function performFunctionXAfterDelay() {
  // 1000 ms delay
  window.setTimeout(functionX,1000)

}

function functionX() {
   // YOUR TIME DELAYED CODE
}
于 2012-11-08T07:47:40.793 に答える
1

つまり、writeFile 関数は非同期であるということですか?

writeFile 関数自体にコールバック関数を作成してから、someOtherfun() を実行します。

編集:コールバック関数で残りの反復を実際に行うことができないため(あなたが言った)、次のようなことができます:

function writeFile () {
    ... here goes your function ...
    if ( finished ) {
        window.finished = true;
    }
}

for (yourForCondition) {
    if () {
        window.finished = false;
        writeFile(); 
        while (!window.finished) {}
    }

    if () {
        someOtherFun();
    }
}

少し汚れていますが、動作するはずです。writeFile() が完了したと言うまでループします。

Edit2 : "while (!window.finished) {} は、1 つのコアを 100% にペグするビジー待機ループであり、おそらくスクリプトを強制終了するかどうかをブラウザーにユーザーに尋ねさせるため、おそらく機能しません。 – フレデリック ハミディ"

于 2012-11-08T07:45:23.650 に答える
0

こんにちは、「else if(i > 1 && i <=3)」コードの実行前に待機する必要はないと思います。「if(i <= 1)」条件が真で「 writeFile(lFileData); 」が実行されると、「else」部分に制御が渡されず、「 someOtherfun()」が実行されないためです。:)

于 2012-11-08T07:53:29.860 に答える
0
var t = setInterval("javascript expression", milliseconds);

clearInterval(t);

あなたは使うことができますsetInterval

于 2012-11-08T07:51:12.173 に答える