サービスへの HTTP 呼び出しを介して電話番号を保存するサイトがあり、サービスがページ上の電話番号にバインドするための電話番号エントリの新しい ID を返すとします。
この場合、電話は「telephones」という配列に格納され、datacontext.telephones.updateData は電話を $.Deferred([サービス コール ロジック]).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' コールバックが 'response' として新しい ID で呼び出されると、クエリがどの電話に関連するかに関係なく、i の値は常に telephones.length+1 であり、回線は
telephones[i].telephoneId = response;
telephones[i] が存在しないため、エラーがスローされます。
成功のコールバックで i の個々の値を保持する方法を教えてもらえますか?