![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| BugZZ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 19.5.2008 Где: Germany Репутация: нет Всего: нет |
привет всем!
вот уже который день пытаюсь разовбраться с этой функцией. Да-да на многих ресурсах написано черным по белому "throw() - генерирует (быьрасывает) исключения"..Вот только что за исключения. что именно кроется за этим словом? Да я знаю что исключения нужны для try/catch..но все примеры которые я пока видел - меня все никак не просветлят. вот один из них из книги по ajax-у.
Проверка такая: от сервера должно прийти случайное число от 1 до 100. Поэту примитивная проверка проста: если равен 0 или длинна ответа больше 3 = ошибка. Ну с первым if-ом все ясно а вот зачем в нем второй (в короткой форме) да еще и с этой функцией.... ЗЫ. Код, что я написал - часть функции которая вызывается в try/catch поэтому то и используется throw(), но я все никак не пойму зачем еще одно условие ? Может кто-нить объяснить на другом примере - зачем такая конструкция и какие за и против. На некоторых англоязычных сайтах читал что мол эта throw помогает в дебагинге, особенно если нет firebug-а. |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 6 Всего: 101 |
Функция для эмуляции ошибки.
В случае с аяксом могли бы вывести и через обычное сообщение или пользовательскую errorFun('сообщение'). но так как смысл сообщения - ошибка, то даже если программных средств для её обработки нет, сделали эмуляцию, чтобы по тексту было ясно, что речь об ошибке и ловят её через catch(). Если нет catch(), вылетит ошибка браузера (по идее) с указанным пользовательским кодом (текстом). Другой (прямой) способ использования. если у Вас сложный расчёт, где возможна ошибка, но на тестах Вы не можете или не хотите получить, но хотите отладить вывод сообщения об ошибке (например, переменная в данной точке может превысить 999, а этого нельзя допускать) - нет ничего проще - пишете throw('Ошибка 999'); и доотлаживаете обработку этой ошибки в своём коде. -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| BugZZ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 19.5.2008 Где: Germany Репутация: нет Всего: нет |
получается что throw эмулирует ошибку, точнее сообщение об ошибке с текстом "server error" или объектом response, независимо, есть ли на самом деле место этой ошибке или нет? Как я понял для этого и нужно первое условие, чтобы генерация ошибки сработала там и толоко там, где о ней нужно сообщить, в случаее ее возникновения...так или опять напутал ?
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 6 Всего: 101 |
Это целиком на усмотрении программиста : ). Может сообщить там, где её нет, а может не сообщать ("вы вольны быть злодеем", см. док. по народным и ненародным сказкам, там эта тема подробно раскрывается). Но смысл примера по ajax, наверное в том, что там ошибка сервера есть. (А у JS нет встроенных средств о её оповещении, нет события Error на неприход ответа или на код 404 и на что-либо ещё в связи с объектом XMLHttpRequest.)
-------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| BugZZ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 19.5.2008 Где: Germany Репутация: нет Всего: нет |
А можно какой-нить пример, на котором я бы окончательно уяснил особоеность/полезность этой функции ? Что-то с и без функцией. чтоб уж точно понял разницу между а и б ....А то все пока накаком-то абстрактном уровне.
UPDATE: Я вот просто тут на туториал натктнулся и честно говоря не совсем пойму зачем все так сложно. Может за этим и кроется что-то благородное, но подобные стать (а их много) только столку сбивают, поэтому и прошу како-йнить стоящий пример Это сообщение отредактировал(а) BugZZ - 27.1.2010, 02:10 |
|||
|
||||
| segrey |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 26.12.2006 Репутация: нет Всего: нет |
Смысл в том, чтобы отделить обработку ошибок от того места, где устанавливается сам факт наличия ошибки. Пример по ссылке кривоватый, не стоит делать try catch в одной функции где все throw и вызываются, там можно обойтись и простым if ом.
Но если ошибка происходит в функции А, а обработать её надо в функции Б (когда функция Б вызывает функцию А), тут на помощь и приходят исключения. Конечно функция А может сделать что - то вроде return {код ошибки}, но не всегда это правильно: во первых функция возможно уже должна возвращать нормальные значения, а во вторых мы можем вдруг захотеть обработать конкретную ошибку уже в другом месте (которое находится раньше функции Б в стеке вызовов. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |