【发布时间】:2016-04-10 20:15:35
【问题描述】:
A previous question revealed how to load in jQuery using native JavaScript.我已经成功使用了那里答案中的回调代码,在这里复制:
// 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?完成同样的事情
我问的原因是因为我突然需要取消之前的回调,这真是一团糟。我希望 Promises 是一种更好的方法,我对使用加载器框架没有真正的兴趣。
这是我到目前为止所得到的,但 Promise 总是以被拒绝:
// 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在一段时间后加载失败。
标签: javascript jquery promise