Promisify XMLHttpRequest

This commit is contained in:
Matthias Schiffer 2018-10-31 15:33:52 +01:00
parent 68ff0cb4b1
commit 84762894c8
Signed by: neocturne
GPG key ID: 16EF3F64CB201D9C
2 changed files with 38 additions and 11 deletions

View file

@ -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();
};

View file

@ -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);
}