Javascript JQuery show()-暂停函数,直到执行回调

Javascript JQuery show()-暂停函数,直到执行回调,javascript,jquery,halt,Javascript,Jquery,Halt,我希望我的javascript/jquery应用程序停止执行所有动画,只在显示loading.gif时继续执行 我确实设法显示加载的.gif文件,而其他动画正在进行,但我真的需要它已经显示之前,任何其他动画 因此,我制作了一个方法,等待回调执行,但它没有按预期工作 var Shown = false; function ShowLoadingGif() { $("#loading").show("fast", function() { Shown = true;

我希望我的javascript/jquery应用程序停止执行所有动画,只在显示loading.gif时继续执行

我确实设法显示加载的.gif文件,而其他动画正在进行,但我真的需要它已经显示之前,任何其他动画

因此,我制作了一个方法,等待回调执行,但它没有按预期工作

var Shown = false;
function ShowLoadingGif() {
    $("#loading").show("fast", function() {
        Shown = true;   
    });
    while(!Shown) {
        //wait for callback to be executed
    }
    Shown = false;
}
看。我不仅想知道如何正确地着手解决这个问题;我也将感谢任何关于为什么它不能像我期望的那样工作的意见


提前谢谢

您可以使用jQuery Deferred对象(请参阅)

我已经更新了你的提琴,现在它会在你预期的东西完成时发出警报

()

我还更新了代码质量

var $promise = $.Deferred();

$promise.done(function() {
    alert("Done...");
});

$(function() {
    $("button").on("click", function() {
        $("#loading").show("slow", function() {
            $promise.resolve();
        });
    });
});

您可以缩短所有这些时间:

$('#loading').show('fast', function(){
  console.log('Im loaded');
}).promise().done(function(){
  console.log('great loading with you!');
});

因为javascript遵循单线程执行模式。。。这意味着while循环会导致应用程序线程停止执行任何其他代码,包括
show
动画。。。这意味着
show
变量永远不会变为
true
,因此您的while条件永远不会存在。也许这有帮助:处理这种异步方法的唯一方法是使用回调
while(!show)
将使浏览器崩溃。如果您说动画已经在运行,您想暂停它们,请显示gif,然后让它们继续,然后你看到了一个大问题——比简单地将一些代码移到回调函数中要大得多,这听起来像是Ethak,但我无法让它工作。你能看一下这个吗:并告诉我如何确保“加载gif应该已经显示到现在”消息可以延迟到“伟大”消息后的最后一刻?看一看:。您必须将需要延迟的所有内容放入done(function(){…})@user2288476中的回调函数中。如果您觉得我的答案有用,请不要忘记将其标记为有用。如果您还有其他问题,请告诉我。好的,谢谢,但是将所有内容都放在done函数中并不是我想要的。更确切地说,我需要从javascript中的多个点调用ShowLoadingGif(),其余的javascript代码应该等待图片显示。javascript的其余部分可以是从一行到一百行的任意内容,这取决于我调用showLoadingIF()函数的位置。所以我真的需要等待图片显示,然后才退出函数。
$('#loading').show('fast', function(){
  console.log('Im loaded');
}).promise().done(function(){
  console.log('great loading with you!');
});