Здравствуйте. Использую браузер google chrome, проект на react. Не могу поставить breakpoint в async функции в местах где return, if условия, в блоке try catch. Могу поставить breakpoint только на строчках, где создаю переменную, где делаю console.log, и где делаю запрос через Axios. При остановке на этих строчках и нажатии стрелки перехода на следующую строку, я всегда попадаю в какие-то дебри runtime.js Это нормальная ситуация, что в async методе не ставятся breakpoints в любых местах? Прилагаю код Код (Javascript): validatePhone() { return new Promise(async (res, rej) => { let schema = Yup.object().shape({ phone: Yup.string() .required('*Обязательное поле') .length(11, '*Номер должен состоять из 11 цифр') .matches(/^\d+$/, '*Номер должен состоять только из цифр') .test( 'phone-exists', '*Номер не зарегистрирован', async (value) => { let myVar = 'Breakpoint1'; // здесь могу остановиться if (value == null || value == '' || value.length !== 11) { // здесь не могу остановиться return false; } console.log('Breakpoint2'); // здесь могу остановиться try { // 200 if phone does not exist, 500 if phone exists await Axios.get('/api/auth/register/phone/unique', { // здесь могу остановиться params: { phone: value } }); } catch (e) { // if fail, then phone exists return true; // здесь не могу остановиться } return false; } ) }); let validated; try { validated = await schema.validate({ 'phone': this.state.phone }); } catch (e) { this.setState({ ...this.state, errors: { ...this.state.errors, 'phone': e.message } }); return res(false); } // remove old errors this.setState({ ...this.state, errors: { ...this.state.errors, 'phone': '' } }); return res(true); }); }
Попробуй вместо try catch .Использовать catch у axios Код (Javascript): axios.get('') .then(function (response) { }) .catch(function (error) { // попробуй прерви тут }) .then(function () { });
Спасибо. Странно, но вот так без проблем ставиться breakpoint в блоке catch и then. А вот здесь на условии if, всё также не могу поставить breakpoint. Наверное всему виной async метод. if (value == null || value == '' || value.length !== 11) { // здесь не могу остановиться return false; }
Строчки 9-33, в методе test, третий аргумент - это async функция. Код (Javascript): let schema = Yup.object().shape({ phone: Yup.string() .required('*Обязательное поле') .length(11, '*Номер должен состоять из 11 цифр') .matches(/^\d+$/, '*Номер должен состоять только из цифр') .test( 'phone-exists', '*Номер не зарегистрирован', async (value) => { if (value == null || value == '' || value.length !== 11) { // вот здесь не могу остановиться return false; } // try { // // 200 if phone does not exist, 500 if phone exists // await Axios.get('/api/auth/register/phone/unique', { // params: { phone: value } // }); // } catch (e) { // // if fail, then phone exists // return true; // } // return false; Axios.get('/api/auth/register/phone/unique', { params: { phone: value } }) .then(function() { return false; }) .catch(function(e) { return true; }); } ) });
Может так попробуй, я сильно не вникаю чего там у тебя Код (Javascript): var checkAxios = true; let schema = Yup.object().shape({ phone: Yup.string() .required('*Обязательное поле') .length(11, '*Номер должен состоять из 11 цифр') .matches(/^\d+$/, '*Номер должен состоять только из цифр') .test( 'phone-exists', '*Номер не зарегистрирован', async (value) => { if (value == null || value == '' || value.length !== 11) { checkAxios = false; } if(checkAxios === true ){ Axios.get('/api/auth/register/phone/unique', { params: { phone: value } }) .then(function() { }) .catch(function(e) { checkAxios = false; }); } } ) });
Пишите в log файлик, вы у клиента в консоли ничего не прочтете, когда он начнет пользоваться. А ошибки будут.