0

現在、jQuery で非同期関数呼び出しを試していて、行き詰まっています。次の例を検討してください。

<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    </head>
    <body>
        <script type="text/javascript">
            f = function() {
                alert("f1");
                var x = 0;
                for (var i = 0; i < 2500000000; i++) {
                    x++;
                }
                alert("f2");
            }

            $.when( f() ).done(alert("done"));
            alert("moving on...");
        </script>
    </body>
</html>

「f1」、「moving on...」、「f2」、「done」の順序でアラート メッセージが表示されることを期待します10 秒間、「f2」、「done」、「moving on...」では何も起こりません。これは私には非同期に見えません。私は何か間違ったことをしていますか、それともこれは意図した動作ですか? もしそうなら、when関数とコールバックを使用することの全体的なポイントは何ですか? 関数 f を同期的に呼び出すことはできませんか?

4

2 に答える 2

2
 $.when(f())

これは(他の関数呼び出しと同様に)f() すぐに$.when呼び出し、結果を に渡します。

$.when()関数を魔法のように非同期にするわけではありません。既存の非同期操作 (AJAX など) でのみ機能します。

Javascript で実際のマルチスレッドを実行する唯一の方法は、Web ワーカーを使用することです。

于 2012-06-17T14:51:15.470 に答える
0

$.when は、deffered 値または通常の値を取ります。通常の値が渡された場合はすぐに呼び出され、deffered の値が渡された場合は操作完了時に呼び出されます。JavaScript では非同期操作ではないため、すぐに実行されます。

 $.when({ x: 10 }).then(function (option) {
            alert(option.x);
        })
于 2012-06-17T15:22:26.427 に答える