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”、“继续...”、“f2”、“完成” 但是当我在 Chrome 中运行代码时,我得到的是:“f1”, 10 秒内什么也没发生,“f2”、“完成”、“继续……”。这对我来说看起来并不异步。我做错了什么还是这是预期的行为?如果是这样,使用 when 函数和回调的全部意义是什么?我不能只同步调用函数 f 吗?

4

2 回答 2

2
 $.when(f())

这会f() 立即调用(就像任何其他函数调用一样),然后将结果传递给$.when.

$.when()不会神奇地使函数异步;它只能与现有的异步操作(例如,AJAX)一起使用。

在 Javascript 中进行实际多线程的唯一方法是使用 Web Workers。

于 2012-06-17T14:51:15.470 回答
0

$.when 采用延迟值或正常值。如果传递了正常值,则立即调用它,如果传递了延迟值,则在操作完成时调用它因为不是javascript中的异步操作,因此它会立即执行。有关在内部传递的正常值时,请参阅下面的示例

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