JAVASCRIPT   36

asyncloader.js

Guest on 12th August 2021 06:50:01 PM

  1. (function() {
  2.     'use strict';
  3.  
  4.     var Loader = (function() {
  5.  
  6.         var scripts = {},
  7.             queue = {},
  8.             loadCount = 0,
  9.             head = document.getElementsByTagName('head')[0],
  10.  
  11.             register = function( script, id ) {
  12.                 if( id ) {
  13.                     scripts[id] = script;
  14.                 }  
  15.             },
  16.  
  17.             isRegistered = function( id ) {
  18.                 return scripts.hasOwnProperty(id) ? true : false;
  19.             },
  20.  
  21.             inQueue = function( id ) {
  22.                 return queue.hasOwnProperty(id) ? true : false;
  23.             },        
  24.            
  25.             require = function( ids, callback ) {
  26.                 //check if each script is a registered callback
  27.                 ids = ids['push'] ? ids : [ ids ];
  28.                 var totalRequired = ids.length,
  29.                     currentScripts = [];
  30.                 if( ids.every( isRegistered ) ) {
  31.                     for( var i = 0; i < totalRequired; i++ ) {
  32.                         if( !inQueue( ids[i] ) ) {
  33.                             queue[ ids[i] ] = writeScript( scripts[ ids[i] ] );          
  34.                         }
  35.                         currentScripts.push( queue[ ids[i] ] );
  36.                     }
  37.                     Promise.all( currentScripts ).then( function() {
  38.                         callback.call();
  39.                     });
  40.                 }
  41.  
  42.             },
  43.  
  44.             writeScript = function( src ) {
  45.                 return new Promise( function(resolve, reject ) {
  46.                     var s = document.createElement('script');
  47.                     s.type = "text/javascript";
  48.                     s.async = true;
  49.                     s.src = src;
  50.                     head.appendChild(s);
  51.                     s.onload = resolve;
  52.                     s.onerror = reject;
  53.                 });    
  54.             };
  55.  
  56.             return {
  57.                 register : register,
  58.                 require : require
  59.             }
  60.     })();
  61.     window.asyncloader = Loader;
  62. })();

Raw Paste


Login or Register to edit or fork this paste. It's free.