Jak zaimplementowałbyś różne typy błędów, abyś był w stanie wyłapać konkretne i pozwolić innym się rozwijać ...?
Jednym ze sposobów osiągnięcia tego jest zmodyfikowanie prototypu Error
obiektu:
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
Błąd związany z połowem:
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
Czy macie jakieś alternatywy?
javascript
error-handling
cllpse
źródło
źródło
Error
ma problemy. Zobacz stackoverflow.com/questions/1382107/…} catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
polega na tym, że nie będzie on działał w IE7, powodując błąd „Zgłoszono wyjątek i nie został przechwycony”. Poniżej znajduje się wyjątkowo głupie (jak zawsze) wyjaśnienie z msdn: „Zawarłeś instrukcję rzut, ale nie została ona ujęta w bloku try lub nie było skojarzonego bloku catch, który mógłby przechwycić błąd. Wyjątki są wyrzucane z bloku try używając instrukcji throw i przechwyconej poza blok try za pomocą instrukcji catch. "instanceOf
. Sprawdź tutajname
właściwości funkcji konstruktora. Sugerowałem wrzucenie niestandardowego przedmiotu zname
właściwością, która się nie zepsuje ...Jak zauważono w komentarzach poniżej, jest to specyficzne dla Mozilli, ale można użyć bloków typu „catch warunkowy”. na przykład:
Daje to coś bardziej zbliżonego do obsługi wyjątków typowych używanej w Javie, przynajmniej składniowo.
źródło
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
try-catch-finally.js
Używając try-catch-final.js , możesz wywołać
_try
funkcję z anonimowym wywołaniem zwrotnym, które będzie wywołać, i możesz łączyć.catch
wywołania w celu wychwycenia określonych błędów oraz.finally
wywołanie do wykonania w obie strony.Przykład
Przykład z nowoczesnymi funkcjami strzałek i literałami szablonów
źródło
Moduł do wykorzystania na eksport
Importuj do skryptu:
Posługiwać się:
Kod telefoniczny zewnętrzny:
źródło
Nie podobało mi się żadne z tych rozwiązań, więc stworzyłem własne. Try-catch-final.js jest całkiem fajny, z wyjątkiem tego, że jeśli zapomnisz jednego małego podkreślenia (_) przed próbą, kod nadal będzie działał dobrze, ale nic nie zostanie złapane! Fuj.
CatchFilter
Dodałem CatchFilter do mojego kodu:
Teraz mogę filtrować
Teraz mogę filtrować jak w C # lub Javie:
źródło
źródło