Potrzebuję metody pobierania różnych skryptów z wywołaniem zwrotnym. Ta metoda działa 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');
})
},
Ale chciałbym bardziej uogólnić metodę ponieważ redundany wzrasta. Czy można przekazać obietnicę $ .when()? Poniżej moja pierwsza próba - ale url jest zawsze taka sama, czyli „Script-n.js” Może brakowało mi punkt i można zilustrować więcej rozwiązanie „Beauty”
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();
},
Aby uzyskać dostęp do wyników odroczonego wartości można użyć 'arguments' magiczną zmienną wewnątrz anonimowej funkcji przekazany do' .then'; –
Zauważyłem, że jeśli używasz then(), jeśli którekolwiek z żądań się nie powiedzie, wejdziesz w jego funkcję, mimo że nie jest ono gotowe, podczas gdy done(), zostanie wykonane dopiero po zakończeniu ostatniego do wykonania, nie ważne, czy niektóre zawiodą. –