Promise-based JavaScript, JSON, and CSS loader
MIT License
A simple JavaScript, JSON, and CSS loader built using Promises.
npm install --save promisescript
var promisescript = require('promisescript');
function loadRecaptcha() {
return promisescript({
url: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js',
type: 'script',
exposed: 'Recaptcha',
}).then(function() {
return new Promise(function(resolve) {
Recaptcha.create('0123456789abcdef', 'recaptcha_widget', {
theme: 'clean',
callback: resolve
});
});
});
}
loadRecaptcha().then(function() {
console.log(Recaptcha.get_challenge());
}).catch(function(e) {
console.error('An error loading or executing Recaptcha has occured: ', e.message);
});
A source object is fully specified when it contains three properties:
url
, the URL that should be fetchedtype
, one of "script", "style", or "json" which defines the type of the URL being fetched.exposed
, a string that is checked against the global object to determine if the script successfully loaded.This module accepts a single source object, and returns a single Promise that resolve if successfully loaded, or rejected if it fails.
Additionally this module can accept multiple source objects as an array. An array of Promises is returned, in the same order as provided.
If you’re feeling lazy, and don’t care about Internet Explorer support, you can provide a string or an array of strings that represents script or style URLs. When utilizing this functionality, this module assumes URLs representing styles end in “.css”, and all others are assumed to be scripts.
To avoid fetching the same URL multiple times, the Promise is cached, which is fine behavior most use cases.
However, this cache can be cleared by calling promisescript.clear
.
To avoid coupling to a specific Promise implementation, this module uses the any-promise
module to get a Promise.
By default, any-promise
will return the browser's native Promises if found or otherwise throws an error.
If you need to support browsers that don't have native Promises, or if you prefer another implementation, please see the any-promise
documentation for how to register.
MIT