2016-09-13 2 views
2

jQuery 3.1.0을 사용하여 알 수없는 번호의 $.ajax() 요청을 생성하고 배열에 결과 약속을 추가합니다.jQuery 3.1.0 then(), done() and when() error swallowing

그러나
$.when.apply($, myArray).then(myFunction, errorHandlingFunction); 

는 myFunction이 테스트 중에 jQuery를 삼켜되고있는 오류를 (던지고있다 : 일단

myArray.push($.ajax(...).promise()); 

모든 요청 내가 사용하여 수행 할 수 있습니다 이해 함수를 호출 할 완료 내 모든 기능은 새로운 것을 던졌습니다. Error()). mightThrow()을 호출 한 후 실행이 catch에 들어가고 지연을 올바르게 거부하지만 이는 콘솔에 표시되지 않습니다.

적용 호출을 생략하고 다음을 수행해도 오류가 완전히 삼킨다. 디버거 라인도 명중되지 않습니다 :

myArray[0].then(function() { 
    throw new Error('test error'); 
}, function() { debugger; }); 

when()을 제거 및 던지기에 휴식 할 수있는 다음과 같은 요인에 의해 실행을 수행 :

myArray[0].done(() => { 
    throw new Error('test error'); 
}).fail(function(){ debugger; }); 

then()에 의해 실행 기능에서 발생하는 오류가있는 것 같습니다 항상 삼켰다. 또한 $.when(...).done(...)의 함수가 done() 내부에있는 경우 오류가 삼키는 오류가 발생합니다.

나는 뭔가를 오해 했습니까? 아니면 jQuery의 버그/기능입니까?

+0

내 대답은 코드와 관련되어 있으므로 참조하십시오. http://stackoverflow.com/a/39206980/104380 – vsync

답변

2

당신은 .then(myFunction).fail(myErrorHandling)를 사용해야합니다. myFunction 내에 오류를 던지면 then()에 의해 생성 된 새로운 약속을 거부하고 fail()에서 처리 할 수 ​​있습니다.

then()에 의해 수신 된 약속이 거부되면 .then(myFunction, myErrorHandling)의 오류 처리 기능이 호출됩니다. 이는 $.when()의 아약스 요청 중 하나 이상이 실패 할 때만 해당됩니다.

+0

내가 시도하지 않은 유일한 조합 일 것임에 틀림 없다! 답변을 주셔서 감사합니다. –

+0

[Markdown 또는 HTML을 사용하여 게시물의 서식을 지정하는 방법은?] (http://meta.stackexchange.com/help/formatting)을 읽어보십시오. – Liam

-1

약속의 경우 .catch(function(error){})을 사용하거나 JQuery .fail(function(error){}), .then은 성공시에만 호출해야하므로 오류가 발생하면 볼 수 없습니다.

자바 스크립트 :

myArray[0].then(function() { 
    console.log('I am a success'); 
}).catch(function(error){ 
    console.error('I am an error', error); 
}); 

JQuery와 :

myArray[0].done(function() { 
     console.log('I am a success'); 
    }).fail(function(error){ 
     console.error('I am an error', error); 
    }); 

건배

+0

두 번째 예에서는 console.log() 호출에서 오류가 발생했을 때 문제가 나타납니다. 이것은 조용히 일어날 것입니다. 사실이 아닙니다 –

+0

, 그냥 두 예제를 시도하고 오류가 throwed된다 자바 스크립트 : '새로운 약속 (기능 (해결) { 해결(); }) 다음 (함수() { 던져 새로운 오류 (. 'test error'); }, function() {디버거;}),' JQuery : '$.ajax ({method : 'get', url : 'http://swapi.co/api/planets/1/'}).promise().done(function(){ 새로운 오류 발생 ('test error '); });'. 오류가 표시되지 않으면 잘못된 것이 있음을 의미합니다. –

+0

마지막 예제에서'.done()'을'then()'으로 변경하거나'$ .when()'에서 약속을 래핑 해보자. 그게 내 문제를 일으키는 것이 었습니다. –

관련 문제