我有以下脚本,它运行5个ajax请求并告知它们何时完成。所有使用jQuery承诺和$.where
。
console.info('Creating promises: start');
var p = [];
for(var i=0; i<5; i++) {
a = $.when( x(i) ).done(function(){
console.log('Promise ' + i + ': done');
});
p.push(a);
}
console.info('Creating promises: done');
console.log('Running promises: start');
$.when.apply($,p).done(function(){
console.log('Running promises: done');
});
function x(i) {
console.log('Promise ' + i + ': start');
return $.ajax({
'url' : '/'
})
.done( function() {
});
}
问题是console.log('Promise ' + i + ': done');
始终返回Promise 5: done
,因为i
- 变量在执行5
函数时具有值done()
。
我的问题是,i
- done()
- for
中的instanceof
- 函数的上下文是一种好的,干净的方法吗?
答案 0 :(得分:3)
您需要使用闭包来完成这项工作(Closures on MDN)
工作片段:
for(var i=0; i<5; i++) {
(function(i){
a = $.when( x(i) ).done(function(){
console.log('Promise ' + i + ': done');
});
p.push(a);
})(i);
}
完整fiddle ...