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