SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Handle with care
Fehlerbehandlung in JavaScript

Friday 8 November 13
WER BIN ICH?

•

Sebastian Springer

•

https://github.com/sspringer82

•

@basti_springer

Friday 8 November 13
Friday 8 November 13
Was ist ein Fehler?

☠
Friday 8 November 13
Was ist ein Fehler?

☠
Whoops, this should not happen.
Friday 8 November 13
Fehlertypen

Friday 8 November 13
Fehlertypen

Friday 8 November 13
Fehlertypen

Friday 8 November 13
Fehlertypen

Friday 8 November 13
Fehlertypen

Friday 8 November 13
Fehlertypen

Friday 8 November 13
Eigene Fehler

throw new Error('An error occurred');

Friday 8 November 13
Eigene Fehler
var MyErr = function (message) {
this.message = message;
this.name = 'MyErr';
}
MyErr.prototype = new Error();
MyErr.prototype.constructor = MyErr;

Friday 8 November 13
Friday 8 November 13
Abfangen von Fehlern
try {
throw new Error('Hello World');
} catch (e) {
console.log(e);
} finally {
console.log('Finished');
}

Friday 8 November 13
Abfangen von Fehlern
try {
} catch (RangeError e) {
}

Friday 8 November 13
Abfangen von Fehlern
try {
} catch (RangeError e) {
}

Friday 8 November 13
Abfangen von Fehlern
try {
} catch (e) {
if (e instanceof RangeError) {
}
}

Friday 8 November 13
Callbacks

Friday 8 November 13
Fehler in Callbacks
Applikation

Friday 8 November 13

Asynchrone
Ausführung
Fehler in Callbacks
Applikation

Friday 8 November 13

Asynchrone
Ausführung
Fehler in Callbacks
Asynchrone
Ausführung

Applikation
Operation

Friday 8 November 13
Fehler in Callbacks
Asynchrone
Ausführung

Applikation
Operation

Friday 8 November 13
Fehler in Callbacks
Asynchrone
Ausführung

Applikation
Operation

☠☂ ☏☣☢

Friday 8 November 13
Fehler in Callbacks
Asynchrone
Ausführung

Applikation
Operation

Callback

Friday 8 November 13

☠☂ ☏☣☢
Fehler in Callbacks
Asynchrone
Ausführung

Applikation
Operation

Callback

Friday 8 November 13

☠☂ ☏☣☢
Fehler in Callbacks
function myTimeout() {
throw new Error("whoops");
}

Friday 8 November 13
Fehler in Callbacks
function myTimeout() {
throw new Error("whoops");
}
try {
setTimeout("myTimeout()", 0);
} catch (e) {
console.log(e);
}
Friday 8 November 13
Fehler in Callbacks

☠

function myTimeout() {
throw new Error("whoops");
}
try {
setTimeout("myTimeout()", 0);
} catch (e) {
console.log(e);
}
Friday 8 November 13
Friday 8 November 13
Fehler in Callbacks
$.ajax({
url: ‘/something’,
success: function (data) {
...
},
error: function (data) {
...
}
});

Friday 8 November 13
Friday 8 November 13
Fehler in Callbacks
var fs = require('fs');
fs.readFile('file', function (err, d) {
...
});

Friday 8 November 13
Fehler in Callbacks
var fs = require('fs');
fs.readFile('file', function (err, d) {
...
});
null

Friday 8 November 13
Fehler in Callbacks
Error {
errno: ...
code: ...
path: ...
message: ...
}

Friday 8 November 13
Events

Friday 8 November 13
Error Events
Subject

Friday 8 November 13

Observer
Error Events
Subject

Friday 8 November 13

Observer
Error Events
Subject

Friday 8 November 13

Observer
Error Events
Subject

Observer
on(‘error’, function...

Friday 8 November 13
Error Events
Subject

Observer
on(‘error’, function...

☠☂ ☏☣☢

Friday 8 November 13
Error Events
Subject

Observer
on(‘error’, function...

☠☂ ☏☣☢

trigger(‘error’, {...

Friday 8 November 13
Error Events
Subject

Observer
on(‘error’, function...

☠☂ ☏☣☢

trigger(‘error’, {...

Friday 8 November 13
Promises
http://wiki.commonjs.org/wiki/Promises

Friday 8 November 13
Promises
In Javascript, promises are objects which represent the pending result of
an asynchronous operation.
(Martin Fowler)

Friday 8 November 13
Promises
$.ajax({
url: ‘/my/url’
}).done(function (data) {
...
}).fail(function (data) {
...
}).always(function (data) {
...
});

Friday 8 November 13
Promises
function promisedFunc() {
var def = $.Deferred();
// do something asynchronous
// success
def.resolve();
// fail
def.reject();
return def.promise();
}

Friday 8 November 13
Promises
promisedFunc().done(function () {
// success
}).fail(function () {
// failure
}).always(function () {
// success & failure
});

Friday 8 November 13
Promises
$.when(
promisedFunc(),
promisedFunc()
).then(success, failure);

Friday 8 November 13
Promises
•

http://api.jquery.com/category/deferred-object/
Client only

•

https://github.com/kriskowal/q
Client + Server

•

https://github.com/kriszyp/node-promise
Server only

Friday 8 November 13
Node.js Domain

Friday 8 November 13
Node domain
var domain = require(‘domain’).create();
domain.on(‘error’, function (err) {
console.log(err);
});
domain.run(function () {
...
});

Friday 8 November 13
Node Domain
Wird ausgeführt bei:

•
•

Friday 8 November 13

error-Events
Exceptions
window.onerror

Friday 8 November 13
window.onerror
catch it all!

Friday 8 November 13
window.onerror
window.onerror = function (msg, url, nr)
{
...
return true;
}

Friday 8 November 13
window.onerror
window.onerror

Code

Friday 8 November 13
und jetzt?

Friday 8 November 13
und jetzt?
Logging FTW!

Friday 8 November 13
Logging

Client

Friday 8 November 13

Server
Logging

Client

Server
☠☂ ☏☣☢

Friday 8 November 13
Logging

Log Message

Client
☠☂ ☏☣☢

Friday 8 November 13

Server
Logging

Log Message

Client
☠☂ ☏☣☢

Friday 8 November 13

Server
Logging
window.onerror = function (msg, url, nr)
{
$.ajax({
url: ‘/logger’
data: {
msg: msg,
url: url,
nr: nr
}
});
return true;
}
Friday 8 November 13
Logging
Fire and Forget

Friday 8 November 13
Fragen?

Friday 8 November 13
Sebastian Springer
sebastian.springer@mayflower.de
Mayflower GmbH
Mannhardtstr. 6
80538 München
Deutschland
@basti_springer
https://github.com/sspringer82

Friday 8 November 13

Contenu connexe

Plus de Sebastian Springer

Plus de Sebastian Springer (20)

Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
 
Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.js
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web Performance
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Angular2
Angular2Angular2
Angular2
 
Einführung in React
Einführung in ReactEinführung in React
Einführung in React
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Typescript
TypescriptTypescript
Typescript
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Lean Startup mit JavaScript
Lean Startup mit JavaScriptLean Startup mit JavaScript
Lean Startup mit JavaScript
 

Dernier

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Dernier (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Error handling in JavaScript