Перехват ошибок
Подскажите пожалуйста. Не могу понять, почему, но номер 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, время: 06:45. |