Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 多个Donecallback延迟_Javascript_Jquery_Jquery Deferred - Fatal编程技术网

Javascript 多个Donecallback延迟

Javascript 多个Donecallback延迟,javascript,jquery,jquery-deferred,Javascript,Jquery,Jquery Deferred,doneCallbacks状态的文档是在解析延迟时调用的函数或函数数组。 当我写.then(新数组(getData2,showDiv))或时,然后([getData2,showDiv]) 他们没有一个被叫来 正确的语法是什么? 更新 数组的语法应该是。然后(新数组(getData2(),showDiv())还是。然后([getData2(),showDiv()])加括号 请参见这似乎是jQuery中的一个错误 一个简单的解决办法 var CallbackHandler = (function (

doneCallbacks状态的文档是在解析延迟时调用的函数或函数数组。

当我写
.then(新数组(getData2,showDiv))
时,然后([getData2,showDiv])
他们没有一个被叫来

正确的语法是什么?

更新 数组的语法应该是
。然后(新数组(getData2(),showDiv())
还是
。然后([getData2(),showDiv()])
加括号

请参见

这似乎是jQuery中的一个错误

一个简单的解决办法

var CallbackHandler = (function () {
    var callbacks = [];

    return {
        'add': function (fn) {
            callbacks.push(fn);
            return this;
        },
        'executor': function () {
            var calledBy = this;
            $.each(callbacks, function () {
                this.call(calledBy);
            });
        }
    };

})();

CallbackHandler
    .add(function () {
        // first callback
    })
    .add(function () {
        // second callback
    });

// Called as:
$.when({a: 1})
 .then(CallbackHandler.executor);

您确定您的延迟得到解决还是被拒绝?您是否尝试过
done()
fail()
?最有可能的情况是,延迟仍处于“挂起”状态(即,您有一个逻辑错误),因为此语法确实有效。在控制台中尝试以下操作:
$.Deferred().resolve()。然后([function(){console.log(“foo”);},function(){console.log(“bar”);})@CarlR:fiddle有几个问题(包括在现场执行而不是设置为回调的内容)。这是一个例子。“有什么问题吗?”乔恩:你的版本行得通。我在这把小提琴上做错了什么@CarlR:AJAX请求失败了,因此它们的承诺永远无法实现,处理程序也永远不会被调用(它们是成功处理程序)。如果您将
。然后
更改为
。始终
您会发现它们被正确调用。jQuery中有错误吗?简单的解决方法?您是否尝试了类似于
$.Deferred().resolve().then([function(){console.log(“foo”);},function(){console.log(“bar”);})的操作
看看它是否工作正常?@Jon-当然我试过了()--是的,这是一个简单的解决方法。你试过上面的代码片段吗?这一切完全没有理由。@Jon-你试过我的小提琴吗?$.get()方法返回一个延迟的jqHXR对象,但仍然没有调用多个回调。的第一个参数是回调数组,当延迟成功完成时将调用该数组。你的小提琴使用了一个延迟键,但失败了。当然,不会执行回调。该变通方法的示例使用了一个延迟的解决方案。如果您费心用
$而不是
$来尝试JSFIDLE,那么get
就可以正常工作了。