Перехват ошибок
Подскажите пожалуйста. Не могу понять, почему, но номер 1 (первый throw) не вываливается в блок catch() - второй аж бегом.
![]() Подскажите, а то устал искать. Спасибо. |
Код, вставленный скриншотом - да вы извращенец, батенька )
Может потому что выполняется if (false) { if (***) {**} else { trhow .. } } else { throw } ? |
Да под вечер было уже лень перебивать. Прошу прощения. Там вложений много. Вот обобщенный код модуля.
try { if (VisualStateController.getSelectedLine() !== undefined) { switch (tileId) { case 'InfoDataTile': sceneDataService.getLineInfo(VisualStateController.getSelectedLine(), function (json) { if (json.Result === 'OK') { ................................................ } else { throw new Error('sdfsfsdfsfsdfdsdf'); } }); break; default: sceneDataService.getPartialView(tileId, function (json) { if (json.Result === 'OK') { ................................................ } else { Сюда точно попадаем - генерируется исключение но вместо того, чтобы попасть в catch выше - оно уходит в консоль броузера и отображается там throw new Error('sdfsfsdfsfsdfdsdf'); } }); } } else { throw new Error('sdfsfsdfsfsdfdsdf'); } } catch(e) { ................................................ } так что он по коду его не обходит. В глобальный Catch ошибка то должна попасть. Спасибо. |
Разобрался. Спасибо.
|
Гм. Можно было просто спросить что именно получилось. Вывел в интерфейс функций вместе с Callback еще и ErrorCallback и выбрасываю сообщение об ошибке в место вызова функции модуля. Неотработка по месту вероятно как-то связана с асинхронностью работы функций в модуле. Было
01 try { 02 if (VisualStateController.getSelectedLine() !== undefined) { 03 switch (tileId) { 04 case 'InfoDataTile': 05 sceneDataService.getLineInfo(VisualStateController.getSelectedLine(), function (json) { 06 if (json.Result === 'OK') { 07 ................................................ 08 } else { 09 throw new Error('sdfsfsdfsfsdfdsdf'); 10 } 11 12 }); 13 break; 14 default: 15 sceneDataService.getPartialView(tileId, function (json) { 16 if (json.Result === 'OK') { 17 ................................................ 18 19 } else { 20 Сюда точно попадаем - генерируется исключение 21 но вместо того, чтобы попасть в catch выше - оно уходит в консоль броузера и отображается там 22 23 throw new Error('sdfsfsdfsfsdfdsdf'); 24 } 25 }); 26 } 27 } else { 28 29 throw new Error('sdfsfsdfsfsdfdsdf'); 30 } 31 } catch(e) { 32 ................................................ 33 } Стало 01 try { 02 if (VisualStateController.getSelectedLine() !== undefined) { 03 switch (tileId) { 04 case 'InfoDataTile': 05 sceneDataService.getLineInfo(VisualStateController.getSelectedLine(), function (json) { 06 if (json.Result === 'OK') { 07 ................................................ 08 } else { 09 ErrorCalback(new Error('sdfsfsdfsfsdfdsdf')); 10 } 11 12 }); 13 break; 14 default: 15 sceneDataService.getPartialView(tileId, function (json) { 16 if (json.Result === 'OK') { 17 ................................................ 18 19 } else { 20 Сюда точно попадаем - генерируется исключение 21 но вместо того, чтобы попасть в catch выше - оно уходит в консоль броузера и отображается там 22 ErrorCalback(new Error('sdfsfsdfsfsdfdsdf')); 23 24 } 25 }); 26 } 27 } else { 28 29 ErrorCalback(new Error('sdfsfsdfsfsdfdsdf')); 30 } 31 } catch(e) { 32 ................................................ 33 } ну и в месте вызова функции модуля MyMoDule.MyFunc(Param1, functionCallback(data){}, functionErrorCallback(error){ alert(error.message);}); |
Да, у новичков обычно проблемы с пониманием асинхронности. Отсюда и ноги растут.
|
Часовой пояс GMT +3, время: 13:51. |