2013-03-19 2 views
0

Когда дело доходит до исчерпывающих всеобъемлющих ошибок, мне любопытно, как люди генерируют длинные заявления без запроса сообщения для каждой возможности.Всеобъемлющие условные сообщения об ошибках

Выгода что-то вроде следующего:

if(typeof hello !== "undefined" && hello == 3){ 

} 

, что оба условия необходимы. Я пробовал экспериментировать с использованием массивов и объектов для операторов if, подобных следующим.

var validate = [ 
    (typeof hello !== "undefined"), 
    (hello == 3) 
]; 

Затем вы можете использовать что-то вроде _.without() функции underscore «s, чтобы захватить true против false значения и проверить, если там, где какие-либо ошибки. Проблема с этим массивом выше заключается в том, что если hello не определено, будет ошибка.

var validate = [ 
    (typeof hello !== "undefined"), 
    (typeof hello !== "undefined" && hello == 3) 
]; 

Поэтому я должен сделать это, что очень повторяемо.

Примеры пока не дали ответа. Я только что придумал это.

var valid = [ 
    (_.isObject(email)) ? false : "email is not object", 
    (dotty.exists(email, "event")) ? false : "event does not exist", 
    (email.event == "inbound") ? false : "event is not set to inbound", 
    (dotty.exists(email, "ts")) ? false : "ts does not exist" 
]; 
var errors = _.without(valid, false); 
if(errors.length == 0) // no errors 

Это намного более прогрессивный.

var valid = [ 
    (_.isObject(email)) ? false : "email is not object", 
    (dotty.exists(email, "event")) ? false : "event does not exist", 
    (dotty.exists(email, "event") && email.event == "inbound") ? false : "event is not set to inbound", 
    (dotty.exists(email, "ts")) ? false : "ts does not exist" 
]; 
var errors = _.without(valid, false); 
if(errors.length == 0) // no errors 

Но мне все еще нужно быть подробным.

Все это относится к следующей идее.

Существует два способа обработки ошибок.

  1. Когда появляется сообщение об ошибке, иметь дело с этой ошибкой, прежде чем переходить
  2. Present все ошибки

я предпочитаю последний.

Существуют ли какие-либо библиотеки для поддержки сложных операторов if для целей проверки?

UPDATE

Поскольку следующий оператор не имеет ничего общего с предыдущим, который хорошо иногда, я застрял с сумасшедшим склоном.

Там должен быть какой-то способ, чтобы предотвратить это ...

typeof email !== "undefined" 
typeof email !== "undefined" && _.isObject(email)) 
typeof email !== "undefined" && _.isObject(email)) && dotty.exists(email, "event")) 
typeof email !== "undefined" && _.isObject(email)) && dotty.exists(email, "event")) && email.event == "inbound" 

v.s легкость чтения

typeof email !== "undefined" 
_.isObject(email)) 
dotty.exists(email, "event")) 
email.event == "inbound" 

Я хочу, чтобы это было проще и не иметь наклон. В приведенном ниже примере можно сказать, что email: undefined, но color есть и он равен yellow. Я хотел бы видеть отчет следующее сообщение об ошибке

(typeof email !== "undefined") ? false : "no email", 
(_.isObject(email)) ? false : "email isn't object", 
(dotty.exists(email, "event")) ? false : "event not present", 
(email.event == "inbound") ? false : "event not inbound", 
(typeof color !== "undefined") ? false : "no color", 
(color == "yellow") ? false : "color not yellow", 

[ 
    "no email", 
    "email isn't object", 
    "event not present", 
    "event not inbound", 
    false, 
    false  
] 

Другими словами, я хочу, чтобы цвет не возвращается как ошибка, так как она действует. Но я хочу вернуть все другие ошибки.

Или мне просто нужно:

[ 
    "no email", 
    false, 
    false 
] 

Если color и email где оба не определены, я не хочу видеть:

[ 
    "no email" 
] 

Это заблуждение. Я хотел бы видеть по крайней мере

[ 
    "no email", 
    "no color" 
] 

Или все

[ 
    "no email", 
    "email isn't object", 
    "event not present", 
    "event not inbound", 
    "no color", 
    "color not yellow" 
] 

Больше примеров покатые:

var valid = [ 
    (typeof email !== "undefined") ? false : "email is undefined", // halt the code 
    (typeof email !== "undefined" && _.isObject(email)) ? false : "email is not object", 
    (typeof email !== "undefined" && dotty.exists(email, "event")) ? false : "event does not exist", 
    (typeof email !== "undefined" && dotty.exists(email, "event") && email.event == "inbound") ? false : "event is not set to inbound", 
    (typeof email !== "undefined" && dotty.exists(email, "ts")) ? false : "ts does not exist" 
]; 
var errors = _.without(valid, false); 
if(errors.length == 0) // no errors 
+1

Это то, что вы пытаетесь сделать автоматизировать вызов сценариев проверки при сохранении подробности каждого недействительного условия? –

+0

@ JaredFarrish Я так считаю. – ThomasReggi

+0

Это звучит почти так, как будто вы говорите об [механизме правил] (http://www.jboss.org/drools/) (обратите внимание, что это Java, но эта концепция применяется). Таким образом, вы можете искать механизмы правил Javascript, возможно, [Правила JSON] (http://code.google.com/p/jsonrules/)? Может быть, [Node.js nools] (http://c2fo.github.com/nools/) может быть как-то полезен. –

ответ

Смежные вопросы