A previous question revealed how to load in jQuery using native JavaScript. Я успешно использовал код обратного вызова из ответа там, тиражируемых здесь:Load JQuery с JavaScript, используя Promises
// Anonymous "self-invoking" function
(function() {
// Load the script
var script = document.createElement("SCRIPT");
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
script.type = 'text/javascript';
document.getElementsByTagName("head")[0].appendChild(script);
// Poll for jQuery to come into existance
var checkReady = function(callback) {
if (window.jQuery) {
callback(jQuery);
}
else {
window.setTimeout(function() { checkReady(callback); }, 100);
}
};
// Start polling...
checkReady(function($) {
// Use $ here...
});
})();
Как я могу сделать то же самое с помощью native JavaScript Promises?
Причина Я спрашиваю, потому что мне внезапно нужно отключиться от более раннего обратного вызова, и это ужасный «беспорядок». Я надеюсь, что обещания - лучший способ, и у меня нет реального интереса к использованию платформы загрузчика.
Вот что у меня до сих пор, но обещание всегда заканчивается отвергнуто: (. Я извиняюсь заранее за мое полное невежество)
// This code doesn't work quite right.
// Poll for jQuery to come into existance using a Promise
var jQueryReady = new Promise(
function(resolve, reject) {
// Load jQuery
var script = document.createElement('SCRIPT');
script.type = 'text/javascript';
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(script);
if (window.jQuery) {
resolve("YAY");
} else {
reject("UGH");
}
});
jQueryReady.then(
function(success) {
console.log(success);
},
function(error) {
console.error("Really helpful error:", error);
});
Вам нужно будет продолжить использовать старый код и разрешить обещание только при готовности jquery. В этом случае нет необходимости отклонять его, если jquery не загружается через некоторое время. –