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