2017-10-20 2 views
0

JQuery가 연기 된 일부 데모 코드를 시도하고 있는데 동작을 이해할 수 없습니다.두 번째 지연이 트리거되지 않는 이유는 무엇입니까?

이 내 코드입니다 : DEF 두 경우 모두에서 라인 def.resolve(data);에서

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

상태 여전히 인사가 트리거 즉 단지 첫 번째 메시지 대기에, 왜 할 콜백에 오지 않아 두 번째 메시지는? 아래 그림과 같이

+0

귀하의 코드 나 https://jsfiddle.net/vym79Lz0/을 위해 잘 작동, 사용중인 JQuery와 버전을 공유 – Madhu

답변

1

당신은) (완료에 또 하나의 매개 변수를 추가해야합니다

(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); 
    }); 
})(); 
+0

수락 해 주셔서 감사 드리며 기꺼이 도와 드리겠습니다. – Kamal

관련 문제