understanding_rl_vision/rl_clarity/svelte/json_load.js (51 lines of code) (raw):

// reduced version of lucid/scratch/js/src/load.js const active_requests = new Map(); const cache = new Map(); const handle_errors = function(response) { if (response.ok) { return response; } else { throw new Error(response.status + ':' + response.statusText); } }; const json_loader = function(url, json_preloaded) { if (typeof(json_preloaded) !== "undefined" && typeof(json_preloaded[url]) !== "undefined") { return new Promise((resolve) => { resolve(json_preloaded[url]); }); } else if (cache.has(url)) { return cache.get(url); } else { let promise = fetch(url).then(handle_errors).then(response => response.json()); cache.set(url, promise); return promise; } }; export const json_load = function(url, namespace, json_preloaded) { let request_id = 0; if (typeof(namespace) !== "undefined") { if (active_requests.has(namespace)){ request_id = active_requests.get(namespace) + 1; } active_requests.set(namespace, request_id); } return new Promise((resolve, reject) => { let promise; if (Array.isArray(url)) { promise = Promise.all(url.map((u) => json_loader(u, json_preloaded))); } else { promise = json_loader(url, json_preloaded); } promise.then((response) => { if (typeof(namespace) === "undefined" || active_requests.get(namespace) === request_id) { resolve(response); } }).catch((error) => { if (typeof(namespace) === "undefined" || active_requests.get(namespace) === request_id) { reject(error); } }); }); };