За последние 24 часа нас посетили 17666 программистов и 1281 робот. Сейчас ищут 1326 программистов ...

Не могу поставить breakpoint в Chrome

Тема в разделе "JavaScript и AJAX", создана пользователем виталий032, 17 апр 2020.

  1. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Здравствуйте.
    Использую браузер google chrome, проект на react.

    Не могу поставить breakpoint в async функции в местах где return, if условия, в блоке try catch.
    Могу поставить breakpoint только на строчках, где создаю переменную, где делаю console.log, и где делаю запрос через Axios.
    При остановке на этих строчках и нажатии стрелки перехода на следующую строку, я всегда попадаю в какие-то дебри runtime.js

    Это нормальная ситуация, что в async методе не ставятся breakpoints в любых местах?

    Прилагаю код
    Код (Javascript):
    1. validatePhone() {
    2.   return new Promise(async (res, rej) => {
    3.     let schema = Yup.object().shape({
    4.       phone: Yup.string()
    5.         .required('*Обязательное поле')
    6.         .length(11, '*Номер должен состоять из 11 цифр')
    7.         .matches(/^\d+$/, '*Номер должен состоять только из цифр')
    8.         .test(
    9.           'phone-exists',
    10.           '*Номер не зарегистрирован',
    11.           async (value) => {
    12.             let myVar = 'Breakpoint1'; // здесь могу остановиться
    13.             if (value == null || value == '' || value.length !== 11) { // здесь не могу остановиться
    14.               return false;
    15.             }
    16.             console.log('Breakpoint2'); // здесь могу остановиться
    17.             try {
    18.               // 200 if phone does not exist, 500 if phone exists
    19.               await Axios.get('/api/auth/register/phone/unique', { // здесь могу остановиться
    20.                 params: { phone: value }
    21.               });
    22.             } catch (e) {
    23.               // if fail, then phone exists
    24.               return true; // здесь не могу остановиться
    25.             }
    26.             return false;
    27.           }
    28.         )
    29.     });
    30.  
    31.     let validated;
    32.     try {
    33.       validated = await schema.validate({
    34.         'phone': this.state.phone
    35.       });
    36.     } catch (e) {
    37.       this.setState({
    38.         ...this.state,
    39.         errors: {
    40.           ...this.state.errors,
    41.           'phone': e.message
    42.         }
    43.       });
    44.       return res(false);
    45.     }
    46.  
    47.     // remove old errors
    48.     this.setState({
    49.       ...this.state,
    50.       errors: {
    51.         ...this.state.errors,
    52.         'phone': ''
    53.       }
    54.     });
    55.     return res(true);
    56.   });
    57. }
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Попробуй вместо try catch .Использовать catch у axios
    Код (Javascript):
    1. axios.get('')
    2.   .then(function (response) {
    3.  
    4.   })
    5.   .catch(function (error) {
    6.     // попробуй прерви тут
    7.   })
    8.   .then(function () {
    9.    
    10.   });
     
    виталий032 нравится это.
  3. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Спасибо. Странно, но вот так без проблем ставиться breakpoint в блоке catch и then.
    А вот здесь на условии if, всё также не могу поставить breakpoint. Наверное всему виной async метод.
    1. if (value == null || value == '' || value.length !== 11) { // здесь не могу остановиться
    2. return false;
    3. }
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Покажи весь код, так не понятно
     
  5. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    Строчки 9-33, в методе test, третий аргумент - это async функция.
    Код (Javascript):
    1. let schema = Yup.object().shape({
    2.   phone: Yup.string()
    3.     .required('*Обязательное поле')
    4.     .length(11, '*Номер должен состоять из 11 цифр')
    5.     .matches(/^\d+$/, '*Номер должен состоять только из цифр')
    6.     .test(
    7.       'phone-exists',
    8.       '*Номер не зарегистрирован',
    9.       async (value) => {
    10.         if (value == null || value == '' || value.length !== 11) { // вот здесь не могу остановиться
    11.           return false;
    12.         }
    13.         // try {
    14.         //   // 200 if phone does not exist, 500 if phone exists
    15.         //   await Axios.get('/api/auth/register/phone/unique', {
    16.         //     params: { phone: value }
    17.         //   });
    18.         // } catch (e) {
    19.         //   // if fail, then phone exists
    20.         //   return true;
    21.         // }
    22.         // return false;
    23.  
    24.         Axios.get('/api/auth/register/phone/unique', {
    25.           params: { phone: value }
    26.         })
    27.         .then(function() {
    28.           return false;
    29.         })
    30.         .catch(function(e) {
    31.           return true;
    32.         });
    33.       }
    34.     )
    35. });
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Может так попробуй, я сильно не вникаю чего там у тебя

    Код (Javascript):
    1. var checkAxios = true;
    2. let schema = Yup.object().shape({
    3.   phone: Yup.string()
    4.     .required('*Обязательное поле')
    5.     .length(11, '*Номер должен состоять из 11 цифр')
    6.     .matches(/^\d+$/, '*Номер должен состоять только из цифр')
    7.     .test(
    8.       'phone-exists',
    9.       '*Номер не зарегистрирован',
    10.       async (value) => {
    11.         if (value == null || value == '' || value.length !== 11) {
    12.               checkAxios = false;
    13.         }
    14.          if(checkAxios === true ){
    15.                Axios.get('/api/auth/register/phone/unique', {
    16.                   params: { phone: value }
    17.                })
    18.               .then(function() {
    19.                })
    20.                .catch(function(e) {
    21.                       checkAxios = false;
    22.                });
    23.             }
    24.       }
    25.     )
    26. });
     
    виталий032 нравится это.
  7. виталий032

    виталий032 Активный пользователь

    С нами с:
    31 янв 2014
    Сообщения:
    227
    Симпатии:
    30
    Адрес:
    Владивосток
    @Artur_hopf В любой случае спасибо, хоть какая-то возможность дебага появилась.
     
  8. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Пишите в log файлик, вы у клиента в консоли ничего не прочтете, когда он начнет пользоваться. А ошибки будут.
     
    виталий032 нравится это.