我只是尝试了一些延迟了JQuery的演示代码,我无法理解这种行为。
这是我的代码:
( function(){
var createDef = function(data){
var def = new $.Deferred();
setTimeout(()=>{
alert(data);
def.resolve(data);
},0);
return def;
};
$
.when(createDef('hello'),createDef('world'))
.done((msg)=>{
alert('done ' + msg);
})
.fail((msg)=>{
alert('fail ' + msg);
})
.always((msg)=>{
alert('always ' + msg);
});
})();
在行def.resolve(data);
中,在两种情况下,def都处于暂挂状态,但仍然只有第一条消息,即hello被触发,为什么第二条消息没有完成回调?
答案 0 :(得分:1)
您需要向done()添加一个参数,如下所示:
( function(){
var createDef = function(data){
var def = new $.Deferred();
setTimeout(()=>{
alert(data);
def.resolve(data);
},0);
return def;
};
$
.when(createDef('hello'),createDef('world'))
.done((msg, worldcallbackresult)=>{
//add another parameter to indicate createDef('world')
alert('done ' + msg + 'world callback' + worldcallbackresult);
})
.fail((msg)=>{
alert('fail ' + msg);
})
.always((msg)=>{
alert('always ' + msg);
});
})();