假设我有一个站点,它通过对服务的 HTTP 调用保存电话号码,并且该服务返回电话号码条目的新 id 以绑定到页面上的电话号码。
在这种情况下,电话存储在一个名为“电话”的数组中,datacontext.telephones.updateData 在 $.Deferred([service call logic]).promise(); 中将电话发送到服务器。
uploadTelephones = function (deffered) {
for (var i = 0; i < telephones.length; i++){
deffered.push(datacontext.telephones.updateData(telephones[i], {
success: function (response) {
telephones[i].telephoneId = response;
},
error: function () {
logger.error('Stuff errored');
}
}));
}
}
现在,如果我打电话:
function(){
var deferreds = [];
uploadTelephones(deferreds);
$.when.apply($, deferreds)
.then(function () {
editing(false);
complete();
},
function () {
complete();
});
}
奇怪的事情发生了。所有电话都被发送回服务并被保存。当调用uploadTelephones方法中的'success'回调,新的id为'response'时,无论查询涉及哪个电话,i的值始终为telephones.length+1和line
telephones[i].telephoneId = response;
抛出错误,因为电话[i] 不存在。
谁能告诉我如何在成功回调中保留 i 的各个值?