92 lines
1.9 KiB
HTML
92 lines
1.9 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Zones throttle</title>
|
|
<link rel="stylesheet" href="css/style.css">
|
|
<script src="../dist/zone.js"></script>
|
|
<script src="../dist/long-stack-trace-zone.js"></script>
|
|
</head>
|
|
<body>
|
|
<h1>Throttle Example</h1>
|
|
|
|
<button id="b2">Error</button>
|
|
|
|
<script>
|
|
/*
|
|
* In this example, we have a button that makes some request
|
|
* to our server. We want to only make the request once per
|
|
* 1s, so we use a `throttle` helper. If the request fails,
|
|
* it's difficult to see where the failure originated from.
|
|
*
|
|
* Thankfully, we can use zones to preserve the stack even
|
|
* across async tasks to get a better picture of the control
|
|
* flow of the app.
|
|
*/
|
|
|
|
var throttleMakeRequest;
|
|
|
|
/*
|
|
* Start the app
|
|
* Bind listeners
|
|
*/
|
|
function bootstrap () {
|
|
b2.addEventListener('click', throttleMakeRequest);
|
|
}
|
|
|
|
/*
|
|
* Makes a request to the server
|
|
* Will only make the request once every 1000ms
|
|
*/
|
|
throttleMakeRequest = throttle(function () {
|
|
makeRequestToServer(handleServerResponse);
|
|
}, 1000);
|
|
|
|
|
|
/*
|
|
* Pretend this makes a request to a server
|
|
*/
|
|
function makeRequestToServer (cb) {
|
|
setTimeout(cb, 100);
|
|
}
|
|
|
|
|
|
function handleServerResponse (err, data) {
|
|
throw new Error('Oops');
|
|
}
|
|
|
|
|
|
/*
|
|
* Returns a fn that can only be called once
|
|
* per `time` milliseconds
|
|
*/
|
|
function throttle (fn, time) {
|
|
var id = null;
|
|
if (typeof time !== 'number') {
|
|
time = 0;
|
|
}
|
|
return function () {
|
|
if (!id) {
|
|
id = setTimeout(function () {
|
|
id = null;
|
|
fn();
|
|
}, time);
|
|
}
|
|
};
|
|
}
|
|
|
|
/*
|
|
* Start the application
|
|
*
|
|
* If we start the application with `zone.run`, we
|
|
* get long stack traces in the console!
|
|
*/
|
|
|
|
//bootstrap();
|
|
Zone.current.fork(Zone.longStackTraceZoneSpec).run(bootstrap);
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|