【问题标题】:Skipping a deferred object跳过延迟对象
【发布时间】:2014-05-06 13:09:41
【问题描述】:

我正在尝试跳过一个 ajax 请求(多池):

        function doRequest(next) {
            if (ajaxOpts.ajaxRequestType == "bla") {
                console.log("next");
                $.Deferred().reject().then(next, next);
            } else {
                jqXHR = $.ajax(ajaxOpts)
                    .done(dfd.resolve)
                    .fail(dfd.reject)
                    .then(next, next);
            }
        }

但是$.Deferred().reject().then(next, next);

似乎没有调用下一个函数。难道我做错了什么?

编辑:下一个功能似乎是:

 function () {
            jQuery.dequeue( elem, type );
        }

【问题讨论】:

  • 我已经编辑了你的标题。请不要包含有关问题标题中使用的语言的信息,除非没有它就没有意义。标签用于此目的。另请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该
  • 您使用哪个 jQuery 版本?我无法重现。此外,如果您想在任何情况下执行任何操作 - 使用 .always()。但在你的情况下——为什么不直接调用next 函数呢?你为什么拒绝一个空的延迟对象?
  • 我进行了测试,next 被正确地称为failFilter。是什么让您认为它没有被调用?您是否检查了typeof next 以确保它当时是一个功能?无论如何,你为什么不直接打电话给next()
  • 我使用 jquery 2。我也尝试只调用 next() 但这也不起作用(它只调用一次)。请参阅原始帖子以了解下一个功能是什么。它应该执行添加到队列中的下一个函数。 (所以 dequeue 调用应该这样做)。
  • 顺便说一句,我正在使用这个插件:github.com/GeReV/jQuery.ajaxMultiQueue

标签: javascript jquery jquery-deferred


【解决方案1】:

您错误地使用了 deferred,请参阅 jQuery 网站上的示例: http://learn.jquery.com/code-organization/deferreds/examples/

或者看这个小提琴:http://jsfiddle.net/mbMQz/1/

x = jQuery.Deferred(function(defer){
    defer.reject();
}).then(function(){ alert('1') }, function(){ alert('2') });

【讨论】:

  • 似乎调用了带有警报 2 的函数(或者在我的情况下是下一个函数),但之后没有任何反应,您可以在原始帖子中看到下一个函数中的内容。你有什么想法吗?
  • 问题是下一个函数中的“elem”。由于某种原因,当我不使用 ajax 调用时它没有设置。有科动物吗?
猜你喜欢
  • 2021-06-27
  • 2020-07-19
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多