Javascript:为以后安排HTTP请求

时间:2015-06-11 11:13:47

标签: javascript angularjs cordova job-scheduling

我正在使用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
    };

}])

我想这是许多应用程序的要求。所以我的问题是,这是做这种事情的正确/通常方式吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

要检查您的设备是否在线,请使用cordova-plugin-network-information。此外,当您在类似Cordova的应用程序中使用Angular时,ngCordova将对您有所帮助!

要回答你的问题,这是一个经典的问题,最好的方法就是找到你自己的逻辑混合$ interval,定时通过网络信息插件关闭时查看连接。当网络连接返回时,您必须执行存储在LocalStorage中的任务列表。