Newsgroup: it.comp.lang.javascript
Titolo: throw e gestione degli errori

Sto sviluppando un piccolo oggettino e vorrei fare una gestione degli
errori personale. Nel caso si verifica un errore vorrei passare il codice
d'errore ed un breve messaggio.
Ci possono però essere chiaramente due tipi di errori. Quelli gestiti dal
mio codice e quelli che possono verificarsi ugualmente. Come faccio ad
integrare le due cose
In pratica vorrei capire come organizzare il tutto e dove e come mettere i
codici e tutte le stringhe di errore personalizzato.
Mi devo creare un altro oggetto per la gestione errori?
function MyEx (code) {
   this.code=code;
   this.message="bla bla";
}
Avete qualche esempietto?
Ciao.
ps: ho giò letto la reference su devedge :-)
Faser
-- 
FABIO SERRA
*Questo testo deve essere valutato secondo il senso della RFC-3*
Per rispondere in e-mail sostituire "invalid" con "faser"
--------------------

 ps: ho giò letto la reference su devedge :-)
Allora gia' dovresti sapere tutto. :)
Il throw permette di passare al catch un oggetto di qualsiasi tipo.
Puoi anche semplicemente passargli una stringa, cosi' come un oggetto 
personalizzato complesso.
Puoi utilizzare le stesse proprieta' dell'oggetto che viene "lanciato" 
per default da Mozilla (tanto so che sviluppi su questo :P ), come 
"message", ed in piu' aggiungere una proprieta' per discriminare i due 
tipi di errori (personalizzati, o non).
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 codici e tutte le stringhe di errore personalizzato.
Difficile risponderti senza rischiare di ripetere concetti da reference 
che peraltro ben conosci... ad ogni modo ti racconto come mi comporto io.
Nel codice avremo vari blocchi "try & catch & finally", presumibilmente 
annidati nelle maniere piu' impensabili.
Al verificarsi di un'eccezione, sia generata da te con un'istruzione 
throw che dall'interprete, questa viene rilanciata al primo blocco catch 
che incontra risalendo la gerarchia.
Le eccezioni del linguaggio sono un oggetto con qualche proprieta', vado 
piu' o meno a memoria:
name, message, number e description per jscript
message, fileName, lineNumber, stack e name per javascript
A questo oggetto puoi ovviamente aggiungere proprieta' a piacimento.
In genere io includo istruzioni throw nei blocchi catch e rilancio 
errori ai blocchi catch di livello piu' alto risalendo la gerarchia per 
quanto necessario (ad esempio per aggiungere informazioni sull'errore).
Se l'eccezione e' mia, rilancio al blocco catch un oggetto con le stesse 
proprieta' di quello di default, piu' quelle personalizzate che mi servono.
La gestione diventa alquanto flessibile e in ogni momento puoi creare le 
condizioni che ti servono per decidere come, quando e cosa mostrare 
all'utente e cosa usare invece per il debug.
P.S. grazie per i continui aggiornamenti e informazioni sul mondo xul: 
come predetto non partecipo, ma leggo volentieri

tipi di errori (personalizzati, o non).
Potrebbe essere una buona soluzione. Mi consigli di lanciare le eccezioni
con le stesse proprietà di quelli lanciati da Mozilla? Se facessi in modo
diverso chi usa l'oggetto dovrebbe distinguere nel catch tipo:
if (e instanceof MyEx) bla
else è quella di Mozilla
Giusto?
Ma ad esempio, in un contesto simile ?:
function Connection(url) {
	this.url = url;
	...bla bla		
	try {
		this.req = new XMLHttpRequest();
		req.overrideMimeType("text/xml");
	//qui rilancio l'errore js	
	}catch(e){
		throw(e);
	}
}
Connection.prototype.send = function(method,string,blPermission,response) {
...bla bla bla
 
	switch(method) {
		case "GET":
			...bla bla
			break;
 
		case "POST":
			...bla ...bla
			break;
 
		default: 
			//Qui voglio lanciare un mio errore
			throw("Method not supported")
 
	}
 
	...bla bla	
	var checkLoad = function () {
		if(me.loaded) {
			....
		} else if(iter == 0) {
			//Qui un altro mio errore ma io 
			// vorre magari passare un mio oggetto con
			// che mappa il messaggio con un codice d'errore
			throw('Connection has timed out. Aborted after '+
timeOut + ' seconds');
		} else {
			iter--;
		}
	};
 
}
----
Io però non vorrei scrivere il messaggio direttamente nel throw, ma passare
un codice d'errore che poi venga mappato con il messaggio d'errore nella
lingua prescelta, in modo tale che se chi usa l'oggetto lo rilancia
all'utente ad esempio con un alert(), il messaggio arrivi nella lingua
giusta.
Bah... non so se mi sono spiegato...diciamo che ho problemi organizzativi


come predetto non partecipo, ma leggo volentieri
Ah bene grazie.
Ciao.


 giusta.
Ti stai dimenticando dei setter e getter?
Ti basta avere un oggetto con un accessor "message" che non altro non 
fa che restituirti la stringa localizzata partendo dal codice di errore 
che gli setti nel tuo personale "object error".
In ogni caso, quindi, sia che si tratti di una tua eccezione o di 
Mozilla, ti bastera' richiamare "message" sull'oggetto sollevato nel 
blocco try.


che gli setti nel tuo personale "object error".
Giusto, giusto mi sa che adesso quadra. Grazie a tutti e due per avermi
schiarito le idee.
Ciao.
ps: ma hai mai pensato di raccogliere in modo organico i  tuoi post su
javascript. Sarebbero una miniera d'oro. Non scherzo! 


 javascript. Sarebbero una miniera d'oro. Non scherzo!
Dici che dovrei scriverci un libro? 8)
Scherzi a parte che intendi? Cmq no.. non ci avevo mai pensato, 
sinceramente.


sinceramente.
Intendo che spesso trovo tuoi post molto approfonditi e dettagliati, pieni
di ottimi consigli e finezze (ricordo quello dell'uso dell'oggetto {} al
posto dell'array "associativo" (che non è!! :-) quando non ci si deve
portare dietro tutta la roba, i getter e setter che mi hai spiegato etc
etc). Raccolti ed organizzati un pò secondo me produrrebbero un ottimo
tutorial o meglio un cookbook da leggere con piacere. E per te non sarebbe
neanche una faticaccia, devi solo ripescare tutto quello che hai già
scritto.
Ciao.
ps: non me ne vogliano gli altri che mi sono sfuggiti, non frequento
spessissimo il gruppo.


 scritto.
Lo sai che mi hai stuzzicato?
La faticaccia pero' sarebbe ripescare tutti i miei post e fare una 
scrematura.. O_o" paura..
