50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
/*
|
|
Copyright (c) 2023-forever Douglas Malnati. All rights reserved.
|
|
|
|
See the /faq/tos page for details.
|
|
|
|
(If this generated header is stamped on a file which is a 3rd party file or under a different license or copyright, then ignore this copyright statement and use that file's terms.)
|
|
*/
|
|
|
|
|
|
|
|
// loads the spot map module
|
|
// lets people get an event when that happens
|
|
|
|
// this is necessary because I want SpotMap
|
|
// - to know its own resources
|
|
// - be loadable as-is, and work via normal import {} from ...
|
|
// - which is synchronous
|
|
|
|
// this module solves the problem of
|
|
// - wanting SpotMap to start loading as soon as humanly possible
|
|
// on page load, by getting kicked off as early as construction
|
|
// of objects, etc, not waiting for query results, or something
|
|
// - keeping an easily re-usable bit of code that doesn't require
|
|
// boilerplate anywhere a map might want to get used
|
|
|
|
|
|
// map class relies on external libraries to load, so we want to do the work of loading
|
|
// asynchronously and immediately as soon as the library is imported.
|
|
let mapLoadPromise = import('./SpotMap.js');
|
|
let module = null;
|
|
|
|
// be the first to register for result, which is the loaded module
|
|
mapLoadPromise.then((result) => {
|
|
module = result;
|
|
})
|
|
|
|
|
|
export class SpotMapAsyncLoader
|
|
{
|
|
static async SetOnLoadCallback(fnOnLoad)
|
|
{
|
|
// any other caller will use this function, which will only fire after
|
|
// our registered-first 'then', so we know the spot map will be loaded.
|
|
mapLoadPromise.then(() => {
|
|
fnOnLoad(module);
|
|
});
|
|
}
|
|
}
|
|
|