【问题标题】:How do I use .queue() to properly chain custom callback functions?如何使用 .queue() 正确链接自定义回调函数?
【发布时间】:2011-07-09 17:34:08
【问题描述】:

我正在尝试弄清楚如何链接自定义函数:

我有这样的事情:

show_loader(0, function() {
    open_box($target_open, event.value, '.wide-col', function() {
        hide_loader(function() {
            scroll_to_content($target_open, function() {
            });
            $(this).dequeue();
        });
        $(this).dequeue();
    });
    $(this).dequeue();
});

这些函数实现了一个回调,看起来像这样:

function show_loader(position, callback) {
    $ajaxSpinner.fadeIn();
    status = "loading"; //some non-jQuery stuff
    if (callback) $ajaxSpinner.queue( function() {callback()} );
}

您可以看到我正在尝试做的基本思想:在函数内部的动画完成后执行我的函数。

我认为我的代码不太正确。顺序应该是:显示加载器,打开框,隐藏加载器,最后滚动到内容。相反,这似乎是我测试它时实际发生的事情:显示加载器,隐藏加载器,滚动到内容,然后打开框。

如何让函数调用的顺序正确排队?我是否在适当的上下文中使用了关键字“this”?

【问题讨论】:

    标签: javascript jquery ajax queue


    【解决方案1】:

    您可以看到我正在尝试做的基本思想:在函数内部的动画完成后执行我的函数。

    如果您使用来自 jQuery 的标准动画函数,您应该能够直接向它们传递回调。例如:

    function show_loader(position, callback) {
        $ajaxSpinner.fadeIn(callback);
        status = "loading"; //some non-jQuery stuff
    }
    

    看看http://api.jquery.com,看看它们是如何工作的。

    更新:

    Here is an example that produces the desired result using queue。我正在使用一种较新的形式,其中要执行的下一个函数作为参数传递给回调。 也许你对dequeue 做错了编辑:我试过你的代码,它工作正常。我猜你在其他功能中没有正确使用queue

    【讨论】:

    • 谢谢谢谢谢谢!我花了几个小时阅读 .queue() 包括这里:stackoverflow.com/questions/1058158/… 但是在您回答之前没有提供我需要的确切解决方案。有没有办法确定某个对象上的某个操作是否已完成?这对于在操作完成时调用 next() 很有用。
    • @trusktr:我猜你是说你的另一个问题? ;)
    • @trusktr:我不会那样做。我假设执行函数的顺序应该是固定的,那么为什么要拆分它呢?创建一个按正确顺序调用方法的函数。
    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 2011-04-26
    • 2018-09-24
    • 1970-01-01
    • 2010-11-08
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多