コールバックを使用して別のスクリプトを取得するメソッドが必要です。 この方法がうまく動作:
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');
})
},
が、私はredundanyが増加しているため、より多くの方法を一般化したいと思います。 $ .when()に約束を伝えることは可能ですか?私の最初の試みの下 - しかし、URLは常に同じである、すなわち「スクリプト-n.js」 は、たぶん私はポイントを逃し、あなたはまだ$ .whenが必要
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();
},
あなたは.then' 'に渡された匿名関数の内部' arguments'マジック変数を使用することができます延期値の結果にアクセスしてみてください。 –
私は、then()を使用したときにリクエストが失敗した場合、すべて完了していないにもかかわらずその関数を入力するのに対し、done()では最後のものが終了したときにのみ実行され、どんなに失敗したとしても。 –