Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция throw() - как пользоваться ? Никак не могу понять смысл это функции 
:(
    Опции темы
BugZZ
Дата 26.1.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.5.2008
Где: Germany

Репутация: нет
Всего: нет



привет всем!
вот уже который день пытаюсь разовбраться с этой функцией. Да-да на многих ресурсах написано черным по белому "throw() - генерирует (быьрасывает) исключения"..Вот только что за исключения. что именно кроется за этим словом? Да я знаю что исключения нужны для try/catch..но все примеры которые  я пока видел - меня все никак не просветлят.

вот один из них из книги по ajax-у.
Код

if(response.length > 3 || response.length == 0)
      throw(response.length == 0 ? "Server error" : response);

Проверка такая: от сервера должно прийти случайное число от 1 до 100. Поэту примитивная проверка проста: если равен 0 или длинна ответа больше 3 = ошибка. Ну с первым if-ом все ясно а вот зачем в нем второй (в короткой форме) да еще и с этой функцией....

ЗЫ. Код, что я написал - часть функции которая вызывается в try/catch поэтому то и используется throw(), но я все никак не пойму зачем еще одно условие ?
Может кто-нить объяснить на другом примере - зачем такая конструкция и какие за и против.

На некоторых англоязычных сайтах читал что мол эта throw помогает в дебагинге, особенно если нет firebug-а.
PM MAIL ICQ   Вверх
12345c
Дата 26.1.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 6
Всего: 101



Функция для эмуляции ошибки.
В случае с аяксом могли бы вывести и через обычное сообщение или пользовательскую errorFun('сообщение'). но так как смысл сообщения - ошибка, то даже если программных средств для её обработки нет, сделали эмуляцию, чтобы по тексту было ясно, что речь об ошибке и ловят её через catch(). Если нет catch(), вылетит ошибка браузера (по идее) с указанным пользовательским кодом (текстом).

Другой (прямой) способ использования.
если у Вас сложный расчёт, где возможна ошибка, но на тестах Вы не можете или не хотите получить, но хотите отладить вывод сообщения об ошибке (например, переменная в данной точке может превысить 999, а этого нельзя допускать) - нет ничего проще - пишете throw('Ошибка 999'); и доотлаживаете обработку этой ошибки в своём коде.


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
BugZZ
Дата 26.1.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.5.2008
Где: Germany

Репутация: нет
Всего: нет



получается что throw эмулирует ошибку, точнее сообщение об ошибке с текстом "server error" или объектом response, независимо, есть ли на самом деле место этой ошибке или нет? Как я понял для этого и нужно первое условие, чтобы генерация ошибки сработала там и толоко там, где о ней нужно сообщить, в случаее ее возникновения...так или опять напутал ?
PM MAIL ICQ   Вверх
12345c
Дата 26.1.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 6
Всего: 101



Цитата(BugZZ @  26.1.2010,  17:22 Найти цитируемый пост)
... независимо, есть ли на самом деле место этой ошибке
Это целиком на усмотрении программиста : ). Может сообщить там, где её нет, а может не сообщать ("вы вольны быть злодеем", см. док. по народным и ненародным сказкам, там эта тема подробно раскрывается). Но смысл примера по ajax, наверное в том, что там ошибка сервера есть. (А у JS нет встроенных средств о её оповещении, нет события Error на неприход ответа или на код 404 и на что-либо ещё в связи с объектом XMLHttpRequest.)



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
BugZZ
Дата 26.1.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.5.2008
Где: Germany

Репутация: нет
Всего: нет



А можно какой-нить пример, на котором я бы окончательно уяснил особоеность/полезность этой функции ? Что-то с и без функцией. чтоб уж точно понял разницу между а и б ....А то все пока накаком-то абстрактном уровне.  

UPDATE:
Я вот просто тут на туториал натктнулся и честно говоря не совсем пойму зачем все так сложно. Может за этим и кроется что-то благородное, но подобные стать (а их много) только столку сбивают, поэтому и прошу како-йнить стоящий пример  

Это сообщение отредактировал(а) BugZZ - 27.1.2010, 02:10
PM MAIL ICQ   Вверх
segrey
Дата 27.1.2010, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 26.12.2006

Репутация: нет
Всего: нет



Смысл в том, чтобы отделить обработку ошибок от того места, где устанавливается сам факт наличия ошибки. Пример по ссылке кривоватый, не стоит делать try catch в одной функции где все throw и вызываются, там можно обойтись и простым if ом. 

Но если ошибка происходит в функции А, а обработать её надо в функции Б (когда функция Б вызывает функцию А), тут на помощь и приходят исключения. Конечно функция А может сделать что - то вроде return {код ошибки}, но не всегда это правильно: во первых функция возможно уже должна возвращать нормальные значения, а во вторых мы можем вдруг захотеть обработать конкретную ошибку уже в другом месте (которое находится раньше функции Б в стеке вызовов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0419 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.