Ich brauche eine Methode, um verschiedene Skripte mit einem Rückruf zu holen. 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 möchte die Methode mehr verallgemeinern, weil Redundanz steigt. Ist es möglich, ein Versprechen an $ .when() zu übergeben? Below mein erster Versuch - aber url ist immer das gleiche, das heißt ‚Skript-n.js‘ Vielleicht habe ich den Punkt und man konnte eine „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();
},
Um die Ergebnisse der latenten Werte greifen Sie auf die 'arguments' magische Variable innerhalb der anonymen Funktion' .then' geben können; –
Ich habe festgestellt, dass bei der Verwendung von then(), wenn eine der Anfragen fehlschlägt, Sie ihre Funktion eingeben, obwohl sie nicht erledigt sind, während sie mit done() nur ausgeführt wird, wenn die letzte beendet ist. egal ob einige scheitern. –