为什么Second Deferred没有被触发?

时间:2017-10-20 03:39:02

标签: jquery

我只是尝试了一些延迟了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被触发,为什么第二条消息没有完成回调?

1 个答案:

答案 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);
  });
})();