sourcecode

캐치 문은 던져진 오류를 캐치하지 않습니다.

copyscript 2023. 10. 26. 21:20
반응형

캐치 문은 던져진 오류를 캐치하지 않습니다.

어떤 이유에서인지 이 코드는 나에게 발견되지 않은 예외 오류를 줍니다.캐치블럭이 에러를 잡아내지 못하고 있는 것 같습니다.캡처 블록은 중첩 함수에 오류를 던질 수 없는 방식으로 범위를 지정한 다음 체인 위에서 범위를 더 높게 지정한 캡처 문에 의해 캡처될 것으로 예상합니까?현재 작업 중인 응용 프로그램 내의 중요한 데이터 중 일부가 제거되었지만 leadInfo[ 0 / 1]은(는) URL 매개 변수에서 꺼내는 32자 알파 숫자 문자열이 될 것으로 예상했습니다.

여기서 근본적인 문제는 제 AJAX 호출이 API에서 오류를 반환하고 애플리케이션 내에서 해당 오류가 제대로 처리되지 않는 것입니다.그러므로 던지기 진술의 필요성.AJAX 호출은 정상적으로 완료되고, 이메일 주소가 속성으로 포함되지 않은 JSON 개체를 반환하므로 이를 반영하도록 페이지를 변경하는 방식으로 처리해야 합니다.

    jQuery(document).ready(function(){
        try {
            url = "http://api.com/api/v1/lead/" + leadInfo[1]

            jQuery.ajax({
                type: 'GET',
                contentType: 'application/json',
                url: url,
                dataType : 'jsonp',
                success: function (result) {

                    result = jQuery.parseJSON(result);

                    if(!result.data.email){
                        throw ('New exception');
                    }
                    console.log(result);
                    jQuery('.email').html(result.data.email);
                }
            });


            jQuery('.surveryButton').click(function(){
                window.location.replace("http://" + pgInventory.host + pgInventory.path + leadInfo[0] + "&curLeadId=" + leadInfo[1] + "&curViewedPages=0");
            });
        }
        catch(err) {
            jQuery('.email').html('your e-mail address');
            jQuery('#arrowContent').remove();
        }
});

당신이 왜.try catch블록이 실패하는 이유는 ajax 요청이 비동기적이기 때문입니다.Try catch block은 Ajax 호출 전에 실행되어 요청 자체를 전송하지만 결과가 반환될 때 오류가 발생합니다(AT LATER PITENT TIME).

언제.try catch블록이 실행되고 오류가 없습니다.오류가 발생하면 오류가 발생하지 않습니다.try catch. 필요하시면try catchajax 요청의 경우 항상 ajax를 넣습니다.try catch안에 있는 블록들success콜백, 그 밖에는 절대 안 됩니다.

사용자가 수행해야 할 방법은 다음과 같습니다.

success: function (result) {
    try {
      result = jQuery.parseJSON(result);

      if (!result.data.email) {
         throw ('New exception');
      }
      console.log(result);
      jQuery('.email').html(result.data.email);
    } catch (exception) {
      console.error("bla");
    };
}

자바스크립트에서 콜백 메소드의 비동기적인 특성으로 인해, 에러를 던지는 함수의 맥락이 원래와 다릅니다.이렇게 해야 합니다.

success: function (result) {
  try {
    result = jQuery.parseJSON(result);
    if(!result.data.email){
      throw ('New exception');
    }
    console.log(result);
    jQuery('.email').html(result.data.email);
  }
  catch(err) {
    // Dealing with the error
  }
}

자바스크립트의 (매우 구체적인) 문맥, 폐쇄 바인딩에 대한 이 훌륭한 기사를 보시길 권합니다.

문제는 정의상 ajax가 비동기적이라는 것입니다.당신의 예외는 안에서 던져지지 않습니다.$.ajaxfunction, 그러나 성공 시 콜백 함수에서(나중에 트리거됨).

당신은 한번만 더.error: function(data) {}또한 서버 응답 오류를 처리하기 위해 매개 변수를 지정하고, 더 나아가 콜백 기능 내부에 try/catch 블록을 배치해야 합니다.

콜백 밖에서 잡으려면 예외를 두지 말고 함수를 호출하는 것을 고려해야 합니다. 방법을 알 수 없기 때문입니다.

언급URL : https://stackoverflow.com/questions/16316815/catch-statement-does-not-catch-thrown-error

반응형