У меня есть функция, которая подталкивает обещания от других функций, которые также разрешают массивы обещаний. Мне просто интересно, был ли этот код в порядке.JQuery откладывает другие отложенные ответы
Вот главная функция
/// <summary>Process the validation results (invalid IDR records will have the iop=4)</summary>
this.processValidationResults = function()
{
var promises = [];
var count = (self.idrValidationList.length - 1);
$.each(self.idrValidationList, function (index, idrValidationItem)
{
_onProgress(self.utils.formatCounterMessage(index, count, 'Processing Validation Items'));
if (idrValidationItem.is_valid = 0)
{
//there is a problem with this IDR record
//update the idr_insp table
promises.push(self.updateInvalidEntity(self.configEntities.idr_insp, idrValidationItem.idr_insp_id));
promises.push(self.updateInvalidChildren(self.configEntities.idr_insp, idrValidationItem.idr_insp_id));
}
else
{
//push resolved promise
promise.push($.when());
}
});
return ($.when.apply($, promises));
}
Вот функции, которые вызываются функцией выше
/// <summary>Update the invalid record, sets the IOP field to 4 [Cannot sync due to issue]</summary>
/// <param name="entity" type="Object">GLobal entity definiton </param>
/// <param name="tabletId" type="Int">Primary Key on the tablet to change</param>
this.updateInvalidEnity = function (entity, tabletId)
{
//update the record with the new ID and IOP status
var updateSql = 'UPDATE ' + entity.name + ' SET iop=? WHERE ' + entity.key_field + '=?';
//update the record
return (self.db.executeSql(updateSql, [4, tabletId]));
}
/// <summary>Update the invalid child records, sets the IOP field to 4 [Cannot sync due to issue]</summary>
/// <param name="entity" type="Object">GLobal entity definiton </param>
/// <param name="keyId" type="Int">Foreign Key on the tablet to change</param>
this.updateInvalidChildren= function (parentEntity, keyId)
{
var promises = [];
$.each(parentEntity.child_entities, function (index, child)
{
var def = new $.Deferred();
var updateSql = 'UPDATE ' + child.child_name + ' SET iop=? WHERE ' + child.key_field + '=?';
promises.push(self.db.executeSql(updateSql, [4, keyId]));
});
return ($.when.apply($, promises));
}
И все вышеперечисленные методы толкают отсроченной ниже.
/* Executes the sql statement with the parameters provided and returns a deffered jquery object */
this.executeSql = function (sql, params)
{
params = params || [];
var def = new $.Deferred();
self.db.transaction(function (tx)
{
tx.executeSql(sql, params, function (itx, results)// On Success
{
// Resolve with the results and the transaction.
def.resolve(itx, results);
},
function (etx, err)// On Error
{
// Reject with the error and the transaction.
def.reject(etx, err);
});
});
return (def.promise());
}
Является ли эта цепь звуком? Еще не проверял, но я думаю, что все в порядке. Просто хочу некоторые другие глаза на это, прежде чем я продолжу ...
Разве это не слишком много спрошено, просто проверьте, может ли кто-нибудь найти проблему, если вы даже не проверили ее самостоятельно ?! Почему бы вам просто не узнать, работает ли это или нет? – Martin
@Martin, поскольку в базе данных локальных планшетов в настоящее время нет данных. Мне поручено писать код синхронизации данных без данных. Просто задаю вопрос. Я не думаю, что этот вопрос трудно для любого, кто понимает отложенные. Так что дайте ответ или сохраните свой бессмысленный комментарий для себя ... – gdex
Довольно агрессивный ... – Martin