我知道以前曾问过类似的问题。但是,我找不到满意的答案。所以,我发布这个。
我有一个应用程序,它使用REST API调用从服务器中提取数据。我有4个主要列表视图/选项卡。现在有以下几种情况:
互联网可用 - 一切都很好。您可以在视图之间来回导航,并获取服务器上的任何新数据。以前获取的数据是Ionic提供的缓存视图的一部分。一切都好。
互联网已断开连接。用户立即导航到另一个视图。我无法使用Cordova / Angular提供的Offline / Online事件,因为在事件解除后需要一段时间才能触发事件。同时,屏幕导航已经向我的服务器发出一些$ http调用(在视图上输入事件)并返回错误,因为互联网不可用。 我不认为将所有$ http错误概括为互联网不可用是明智的(有没有办法找到错误是因为没有互联网?)。可能是因为服务器端的其他错误导致错误。如果发生这种情况,我希望能够导航到通用错误页面。
Internet断开连接,用户尝试导航到新视图。如果此新视图加载了数据,则只显示以前在Internet可用时缓存的数据。如果没有加载数据,则显示弹出窗口“请修复您的互联网”。单击“确定”,导航回用户来自的视图。我没有找到任何好的解决方案来实现这一目标。当然,我可以在每个视图的Controller中处理这个问题,但是我想制作一个通用服务或者使用一个httpinterceptor,它可以为我做所有这些所有这些视图。
有关如何优雅地处理所有上述方案的任何可靠解决方案?
答案 0 :(得分:2)
for 2:
对于任何http电话,如果失败,请拨打' AnotherApi'这是一个非常简单的Api,在服务器端不太可能失败,如果这个' AnotherApi'失败,这是一个没有互联网的问题,否则你可以显示你的通用服务器错误页面。
确保这个' AnotherApi'有效,你可以把它放在另一个域/另一个物理位置,或者只是拨打互联网上的任何服务。
for 3:
在我的情况下,我不直接从Api检索数据,在我的所有视图中,检索数据和显示数据都是单独处理的。从webservices和/或signalr检索数据后,我将数据放在内部数组或内部存储或cookie或客户端sqlite中。为了显示数据,我总是从客户端存储中检索数据。
我有一个信号连接(类似于套接字连接),以确保显示数据是自上次成功连接互联网以来可能的最新数据,信号服务器告诉我服务器中是否有任何新数据。