与应用程序和数据库同步脱机



我有一个nativecript(Angular(应用程序,该应用程序可以向服务器呼叫以获取数据。一旦设备上网,我想实现双向同步,但使用当前API,没有BAA。

我可以做一种缓存。偶尔应用程序无效数据库中的信息并再次获取。我不喜欢这种方法,因为有大量列表可能会改变。它们分批获取,即按页面。其中之一是下载到设备上下载并存储的文件列表。因此,我必须保留那些仍在列表中的人,并删除那些不在列表中的。听起来像一场噩梦。

您将如何解决这样的问题?

我使用nativescript-couchebase插件存储数据。我们有以下服务

  1. 连接
  2. 数据
  3. API服务

基于连接性是在线/离线,我们要么从远程API或通过Couchebase DB获取数据。请注意,API服务始终仅返回Couchebase的数据。

所以在线模式

API调用 ->写入DB->从Couchebase返回最新数据

离线模式

阅读DB->从Couchebase返回最新数据

也随之而来,我们将所有API调用都保持在队列中。因此,每当连接返回时,API调用将按顺序处理。从离线模式进入在线模式时,您可能面临的另一个挑战是令牌到期。上网后,可以通过向用户显示一个小弹出窗口来解决此问题。

我通过将数据保存为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);
}); 

最新更新