我正在使用Phonegap(AngularJS + HTML5)开发应用程序,我希望即使用户离线也可以使用某些功能。
我想要做的是当我需要执行HTTP请求时,检查设备是否在线。如果是,则发出请求。否则,将请求存储在其他请求的数组中,当您返回在线时,开始逐个处理所有这些请求。
所以,我创建了一个名为HttpRequestScheduler的服务,它看起来如下所示:
.service('HttpRequestSchedule', ['$http', function ($http) {
var requests = [];
// schedule function tries to send the request
// if it doesn't succeed, it adds it to the requests queue
function schedule(httpRequest) {
$http(
httpRequest
).success(function () {
}).error(function () {
requests.push(httpRequest);
});
}
// this method is called every time the device goes back online
function processRequests() {
while (requests.length !== 0) {
var currentRequest = requests.splice(0, 1)[0];
$http(
currentRequest
).success(function () {
}).error(function () {
requests.push(currentRequest);
});
}
}
return {
schedule: schedule,
processRequests: processRequests
};
}])
我想这是许多应用程序的要求。所以我的问题是,这是做这种事情的正确/通常方式吗?或者有更好的方法吗?
答案 0 :(得分:1)
要检查您的设备是否在线,请使用cordova-plugin-network-information。此外,当您在类似Cordova的应用程序中使用Angular时,ngCordova将对您有所帮助!
要回答你的问题,这是一个经典的问题,最好的方法就是找到你自己的逻辑混合$ interval,定时通过网络信息插件关闭时查看连接。当网络连接返回时,您必须执行存储在LocalStorage中的任务列表。