Выход в автономный режим с синхронизацией приложений и базы данных - PullRequest
0 голосов
/ 09 мая 2019

У меня есть приложение NativeScript (угловое), которое в настоящее время выполняет API-вызовы на сервер для получения данных.

Я хотел бы реализовать что-то, что выполняет двунаправленную синхронизацию, когда устройство подключается к сети, но с использованиеммой текущий API.Нет BaaS.

Первое решение, которое пришло мне в голову, это сделать что-то вроде кэширования.Время от времени приложение делает недействительной информацию в БД и извлекает ее снова.Мне не нравится этот подход, потому что есть большие списки (которые могут измениться. Они выбираются партиями, то есть по страницам. Один из них - это список файлов, которые загружаются и хранятся на устройстве. Поэтому я должен сохранить ихкоторые все еще находятся в списке, и удалите те, которых нет. Это похоже на кошмар.

Как бы вы решили эту проблему?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Я использую плагин nativescript-couchebase для хранения данных. У нас есть следующие услуги

  1. Связь
  2. Данные
  3. API Сервис

В зависимости от того, подключен ли он к сети / офлайн, мы либо получаем данные из удаленного API или через базу данных couchebase. Обратите внимание, что сервис API всегда возвращает данные только от Couchebase.

Так в онлайн режиме

Вызов API -> Запись в БД -> Возврат последних данных из Couchebase

Автономный режим

Чтение БД -> Возврат последних данных из Couchebase

Кроме того, мы поддерживаем все вызовы API в очереди. Поэтому всякий раз, когда возвращается соединение, вызовы API обрабатываются последовательно. Другая проблема, с которой вы можете столкнуться при переходе в онлайн-режим из автономного режима, - это истечение срока действия токена. Эту проблему можно решить, показав пользователю небольшое всплывающее окно после выхода в сеть.

0 голосов
/ 09 мая 2019

Я делаю это, сохраняя свои данные в виде строки json и сохраняя их в файловой системе устройств.

Когда приложение загружается / перезагружается, я считываю его из файла.

т.е.const fileSystemModule = require ("tns-core-modules / file-system");

var siteid = appSettings.getNumber("siteid");
var fileName =  viewName + ".json";
const documents = fileSystemModule.knownFolders.documents();
const site_folder = documents.getFolder("site");
const siteid_folder = site_folder.getFolder(siteid.toString());

const directoryPath = fileSystemModule.path.join(siteid_folder.path, fileName);
const directoryFile = fileSystemModule.File.fromPath(directoryPath);
directoryFile.writeText(json_string)
.then((result) => {
    directoryFile.readText().then((res) => {
        retFun(res);
    });
}).catch((err) => {
    console.log(err.stack);
}); 
...