콜백을 사용하여 다른 스크립트를 가져 오는 메소드가 필요합니다. 이 방법은 작품을 좋아 :
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()을 사용하면 남아있는 마지막 것이 완료 될 때만 실행된다. 아무리 실패해도. –