1

JavaScript コードで遅延を発生させる必要がありますが、コードでタイムアウト関数を作成すると問題が発生します。ただし、タイムアウト コードを削除すると、完全に正常に動作します。ここでタイムアウト/遅延に関する他の投稿を検索しましたが、私の場合は少し違うと思います。

var myArray = new Array('Book One', 'Book Two', 'Book Three', 'Book Four');

x = myArray.length - 1;

(function myLoop(x) {

    page = 3;

    (function myLoop2(page) {
        //setTimeout(function () {   

        var name = myArray[x];

        alert(name + ' Page: ' + page);

        if (--page) myLoop2(page);
        //}, 1000 )
    })(page);

    if (x != 0) myLoop(--x);
})(x);

コード内のコメントを削除すると、別の出力が得られます。

4

2 に答える 2

0

ええ、Javascriptにはsleep/wait関数はありません。ただし、SetTimeout関数を使用して、必要な機能のほとんどを実行できます。

次のコードで望ましい結果が得られると思います。確認してください

var myArray = new Array('Book One', 'Book Two', 'Book Three', 'Book Four');

x = myArray.length - 1;

   (function myLoop(x2) {

    page = 3;

    (function myLoop2(page1, x1) {


       setTimeout(function () {  var name = myArray[x1];

    alert(name + ' Page: ' + page1);

    if (--page1)  myLoop2(page1, x1);}, 1000 )

    })(page,x2); 

    if (x2 != 0)  setTimeout(function () {myLoop(--x2);}, 4000 )
})(x);

状況に応じてsetTimeout関数を使用する必要があります。setTimeoutはコードフローをブロックしません。

Timed関数内でグローバル変数を使用すると、実行された時間インスタンスで変数が使用されます。setTimeout関数で関数のタイミングが設定されたときの値ではありません。

于 2013-01-30T09:47:25.587 に答える
0

残念ながら、JavaScriptにはスリープまたは待機機能はありません。タイムアウトはプログラムの実行を一時停止しません。代わりに、関数が後で実行されるようにスケジュールし、現時点では何も起こらなかったかのように続行します。

したがって、タイムアウトがなければ、コードは通常のネストされたループとして実行されます。

タイムアウトを使用すると、内側のループは「スケジュールを1回、トリガーされたときに次のスケジュール」になります。したがって、外側のループは各本の最初のページすべてをスケジュールします。1秒後、最初のページがトリガーされ、2番目のページがスケジュールされます。さらに1秒後、2番目のページがトリガーされます。

于 2013-01-30T07:00:43.943 に答える