summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-10-31 15:33:52 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-10-31 15:33:52 +0100
commit84762894c86a825d9948556ce462f3930cac1775 (patch)
tree1a6a09f5dc98a9cda89838fa3fb783645a7c37f2 /src
parent68ff0cb4b1f5e8d354282ef988fcb42240e34d1b (diff)
downloadrpgedit-84762894c86a825d9948556ce462f3930cac1775.tar
rpgedit-84762894c86a825d9948556ce462f3930cac1775.zip
Promisify XMLHttpRequest
Diffstat (limited to 'src')
-rw-r--r--src/index.ts16
-rw-r--r--src/util.ts33
2 files changed, 38 insertions, 11 deletions
diff --git a/src/index.ts b/src/index.ts
index 3e7f33d..b4109e6 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,23 +1,17 @@
import MapData from './model/data/MapData';
+import { getJSON } from './util';
import { loadMap } from './view/map';
import Renderer from './view/renderer/Renderer';
-window.onload = () => {
+window.onload = async () => {
const canvas = document.getElementById('rpgedit') as HTMLCanvasElement;
if (!canvas)
return;
const renderer = new Renderer(canvas);
- const xhr = new XMLHttpRequest();
-
- xhr.addEventListener('load', async function() {
- const map = new MapData(JSON.parse(this.responseText));
- const mapView = await loadMap(renderer, map);
- mapView.render();
- });
-
- xhr.open('GET', 'resources/map/test.json', true);
- xhr.send();
+ const map = new MapData(await getJSON('resources/map/test.json'));
+ const mapView = await loadMap(renderer, map);
+ mapView.render();
};
diff --git a/src/util.ts b/src/util.ts
index 7129b2b..29c707e 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -45,3 +45,36 @@ export class Listenable<T extends any[]> {
this.listeners.forEach((l) => l(...args));
}
}
+
+export function get(url: string): Promise<XMLHttpRequest> {
+ return new Promise((resolve, reject) => {
+ const xhr = new XMLHttpRequest();
+
+ const handleError = () => {
+ if (xhr.readyState !== xhr.DONE) {
+ reject(new Error('HTTP request ended in state ' + xhr.readyState));
+ return;
+ }
+
+ reject(new Error('HTTP request returned status ' + xhr.status));
+ };
+
+ xhr.addEventListener('error', handleError);
+
+ xhr.addEventListener('load', () => {
+ if (xhr.readyState !== xhr.DONE || xhr.status !== 200) {
+ handleError();
+ return;
+ }
+
+ resolve(xhr);
+ });
+
+ xhr.open('GET', url, true);
+ xhr.send();
+ });
+}
+
+export async function getJSON(url: string): Promise<any> {
+ return JSON.parse((await get(url)).responseText);
+}