gpt4 book ai didi

jQuery 延迟 : $. when() 与多个对象

转载 作者:行者123 更新时间:2023-12-03 22:28:29 31 4
gpt4 key购买 nike

我需要一种方法来通过回调获取不同的脚本。这个方法工作正常:

fetchScripts:function() {
var _this=this;
$.when(
$.ajax({
url:_this.url + 'library/script-one.js',
type:'get',
cache:true
}),
$.ajax({
url:_this.url + 'library/script-two.js',
type:'get',
cache:true
}),
{ .... },
$.ajax({
url:_this.url + 'library/script-n.js',
type:'get',
cache:true
})
).then(function() {
console.log('fetch is done');

})
},

但我想更概括该方法,因为冗余正在增加。是否可以将 promise 传递给 $.when() ?下面是我的第一次尝试 - 但 url 始终相同,即“script-n.js”也许我错过了重点,你可以说明一个更“美丽”的解决方案

fetchScripts:function() {
this.deferred=new $.Deferred();
this.promise=this.deferred.promise();
var _this=this;
$.each([
'script-one.js',
'script-two.js',
( .... ),
'script-n.js'
],function() {
_this.script=this;
_this.promise.then(function(){
return $.ajax({
url:_this.url + 'library/' + _this.script,
type:'get',
cache:true
})
});
});
$.when(
this.promise
).then(function() {
console.log('fetch is done');

});
this.deferred.resolve();
},

最佳答案

你仍然需要$.when。相反,创建一个 Deferreds(或 Promise)数组,然后 apply它到 $.when:

fetchScripts:function() {
var base = this.url;
var defaults = {
type:'get',
cache:true
};

var libraries = [
'library/script-one.js',
'library/script-two.js',
'library/script-n.js'
];

var deferreds = $.map(libraries, function(current) {
var ajaxOptions = $.extend({ url: base + current }, defaults);
return $.ajax(ajaxOptions);
});

$.when.apply($, deferreds).then(function() {
console.log('All done');
});
}

除了扩展默认设置之外,您还可以使用 $.ajax(defaults) .

关于jQuery 延迟 : $. when() 与多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595297/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com