jQuery Deferred: $.wenn() mit mehreren Objekten
Brauche ich eine Methode zum abrufen von verschiedenen Skripte, die mit einem Rückruf.
Diese Methode funktioniert ok:
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');
})
},
Aber ich würde gerne mehr verallgemeinern die Methode, weil redundany steigt.
Ist es möglich, einen pass Versprechen auf $.wenn()?
Unten mein Erster Versuch - aber die url ist immer die gleiche, D. H. 'script-n.js'
Vielleicht habe ich den Punkt verpasst und man konnte veranschaulichen eine weitere "Schönheit" Lösung
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();
},
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie noch $.wenn. Aber stattdessen erstellen Sie ein array von Deferreds (oder verspricht) und dann bewerben Sie auf $.Wann:
Alternativ zur Verlängerung des Standard-Einstellungen, Sie konnte einfach $.ajax(defaults).
arguments
Magie variable innerhalb der anonymen Funktion übergeben.then
;Versuchen
$.map
, nicht$.each
. Auch nuritem
, nichtitem.script
🙂