Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步调用函数?_Javascript_Jquery_Asynchronous - Fatal编程技术网

Javascript 异步调用函数?

Javascript 异步调用函数?,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,我有一个昂贵的函数createNewWindow()。我想在调用方法时显示一个进度指示器,然后在函数完成时隐藏该指示器。尽管我尝试了所有方法,但直到找到该方法,我才看到进度指示器,所以我尝试异步调用该方法(但失败了) 我试过这个: $( "#submit" ).click( function () { $("#progress").show(); $.Deferred(createNewWindow()); } ); createNewWindow的最后一行是$(“#progr

我有一个昂贵的函数createNewWindow()。我想在调用方法时显示一个进度指示器,然后在函数完成时隐藏该指示器。尽管我尝试了所有方法,但直到找到该方法,我才看到进度指示器,所以我尝试异步调用该方法(但失败了)

我试过这个:

$( "#submit" ).click( function () {
    $("#progress").show();
    $.Deferred(createNewWindow());
} );
createNewWindow的最后一行是$(“#progress”).show()。没用。在此之前,我尝试:

$( "#submit" ).click( function () {
    $("#progress").show();
    setTimeout(createNewWindow(), 0);
} );
同样的效果

正确的方法是什么


我看到其他一些类似的SO帖子描述了使用setInterval或setTimeout,但我无法让它们像我预期的那样工作。

这是一个常见的错误。问题就在这里:

setTimeout(createNewWindow(), 0);
这将立即调用
createNewWindow
,并将结果(可能为空)传递给
setTimeout
。这不是您想要的,您希望将函数
createNewWindow
传递到
setTimeout
,以便稍后调用它:

setTimeout(createNewWindow, 0);
请注意缺少的括号。您将
createNewWindow
(这是一个函数)的值传递给
setTimeout
,而不是调用它并传递其返回值


这将使进度条立即显示出来。但是,如果
createNewWindow
是一个消耗大量资源的非常昂贵的函数,那么它仍然会降低网页的速度,因为所有JavaScript代码都在同一个线程中运行。在这种情况下,你可能需要考虑。

< P>这是一个常见的错误。问题就在这里:

setTimeout(createNewWindow(), 0);
这将立即调用
createNewWindow
,并将结果(可能为空)传递给
setTimeout
。这不是您想要的,您希望将函数
createNewWindow
传递到
setTimeout
,以便稍后调用它:

setTimeout(createNewWindow, 0);
请注意缺少的括号。您将
createNewWindow
(这是一个函数)的值传递给
setTimeout
,而不是调用它并传递其返回值


这将使进度条立即显示出来。但是,如果
createNewWindow
是一个消耗大量资源的非常昂贵的函数,那么它仍然会降低网页的速度,因为所有JavaScript代码都在同一个线程中运行。在这种情况下,您可能需要考虑。

以异步方式调用同步函数并不能使它如此。它仍然会阻塞浏览器,而你最好的选择是某个正在旋转的图像。以异步方式调用同步函数并不能实现这一点。它仍然会阻塞浏览器,您最好的选择是某个正在旋转的图像。这是一个很好的捕获,谢谢!不幸的是,它仍然没有得到适当的进展显示。。。可能是因为正如你在同一条线上提到的那样。但是,我只看到一些示例,其中有一些工作人员将URL指向js文件?有没有一种方法可以创建一个具有函数的新Worker?也许和新员工(createNewWindow)一样简单??这是一个很好的收获,谢谢!不幸的是,它仍然没有得到适当的进展显示。。。可能是因为正如你在同一条线上提到的那样。但是,我只看到一些示例,其中有一些工作人员将URL指向js文件?有没有一种方法可以创建一个具有函数的新Worker?也许和新工人(createNewWindow)一样简单。?