load-script icon indicating copy to clipboard operation
load-script copied to clipboard

Return a promise (feature request)

Open xiaody opened this issue 6 years ago • 2 comments

It would be convenient.

xiaody avatar Jan 07 '19 03:01 xiaody

For anyone else looking for a workaround to get this functionality, this should do the trick.

Plain JS

const load = require('load-script');
const loadScript = async (src, options) => new Promise((resolve, reject) => load(src, options, (err, script) => {
  if (err) {
    reject(err);
  } else {
    resolve(script);
  }
}));

TypeScript

const load = require('load-script');
const loadScript = async (src: string, options: object = {}) => new Promise((resolve, reject) => load(src, options, (err: string | null, script: HTMLScriptElement) => {
  if (err) {
    reject(err);
  } else {
    resolve(script);
  }
}));

maxgardner avatar Oct 17 '19 14:10 maxgardner

I'm doing this to load the Google API client (typescript):

import loadScript from 'load-script';

let loadApiPromise: Promise<typeof window.gapi> | null = null;

const loadApi = (): Promise<typeof window.gapi> => {
  if (loadApiPromise) return loadApiPromise;
  
  loadApiPromise = new Promise((resolve, reject) => {
    loadScript(GAPI_SCRIPT_URL, (error, script) => {
      if (error) reject(error);
      resolve(window.gapi);
    });
  });

  return loadApiPromise;
};

akinnee avatar Jul 10 '22 21:07 akinnee