Я работал с Dex ie JS для управления хранилищем данных IndexDB и теперь хочу синхронизировать c хранилище данных с удаленной базой данных. Проблема, с которой я столкнулся, заключается в том, что я хочу вложить все реляционные / дочерние записи в соответствующие родительские записи в коллекции, а затем отправить всю группу / список на удаленный сервер, используя некоторые значения AJAX.
* 1002. * На практике я вижу, что дочерние записи отсутствуют во время их отправки на удаленный сервер. Тем не менее, я вижу их в console.log (). Я знаю, что это потому, что console.log () получает реальные данные гораздо позже, чем когда данные передаются удаленно. Я также знаю, что это общая проблема с цепочками обещаний, но я почему-то не могу ее решить.
Вот что у меня есть.
function PushRemote(items, modelName) {
console.log(items);
$.ajax({
type: 'POST',
url: '/' + modelName + '/AsyncSave',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify(DataTransferItemList),
success: function (response) {
iDB.open().then(function () {
return iDB.table(modelName).update(response, { isNotSynced: "false" });
});
},
error: function (response) {
console.error(response);
}
});
}
function PushTableToRemote(modelName) {
iDB.transaction('rw',
iDB.Comments,
iDB.CommentRatings,
iDB.Posts,
iDB.PostRatings,
iDB.Reviews,
() => {
iDB.table(modelName).where({ isNotSynced: "true" }).toArray(items => {
items.forEach(item => {
if (modelName == 'Comments') {
iDB.CommentRatings.where({ CommentId: item.CommentId }).toArray(c => item.CommentRatings = c);
}
if (modelName == 'Posts') {
iDB.PostRatings.where({ PostId: item.PostId }).toArray(p => item.PostRatings = p);
}
})
return items;
})
.then(items => {
if (items && items.length > 0) {
PushRemote(item, modelName);
}
});
});
}
pushTableToRemote('Comments');