如何在离子框架中运行http调用作为背景?

时间:2015-07-07 07:09:35

标签: ios angularjs cordova ionic-framework

我正在使用离子框架。我有多个HTTP服务,工作正常。现在的问题是每当我得到任何http呼叫的响应。我无法继续下去。

我们可以将HTTP服务作为后台进程运行。所以我的应用程序继续工作而不等待结果。

这是我的代码

articleService.getArticles().then(function() {

    },function(err){

    });

和服务代码

$http({
                url: "http://myservice.com",
                data: { user_id: 1 },
                method: 'POST',
                withCredentials: true,
            }).success(function (data) {
                deferred.resolve(data);
            }).error(function (err) {
             deferred.resolve(0);
            })
            return deferred.promise;
        }

有什么想法吗?我需要一个离子框架解决方案,它既适用于ios又适用于andriod?

由于

3 个答案:

答案 0 :(得分:1)

尝试使用html5 web worker你需要做的是多线程,因为javascript是单线程环境,你需要web worker

https://html.spec.whatwg.org/multipage/workers.html

答案 1 :(得分:1)

看看你需要的this plunker,它是所有angularjs所以将与离子一起使用。

var app = angular.module('angularjs-starter', []);

app.config(function($routeProvider) {
    $routeProvider.
      when('/', {controller:'StartCtrl', templateUrl:'start.html'}).
      when('/main', {controller:'MainCtrl', templateUrl:'main.html'}).
      otherwise({redirectTo:'/'});
});

app.controller('MainCtrl', function($scope, Poller) {
  $scope.name = 'World';
  $scope.data = Poller.data;
});
app.controller('StartCtrl',function(){});
app.run(function(Poller) {});

app.factory('Poller', function($http, $timeout) {
  var data = { response: {}, calls: 0 };
  var poller = function() {
    $http.get('data.json').then(function(r) {
      data.response = r.data;
      data.calls++;
      $timeout(poller, 1000);
    });

  };
  poller();

  return {
    data: data
  };
});

答案 2 :(得分:0)

也许我误解了你的问题,但我认为你的服务代码是错误的。

尝试这样的事情

myApp.factory('articleService', function($http) {
    return {
        getArticles: function getArticles() {
              return $http({...}); // $http returns a promise, so you dont need your own defer.promise
        }
    }
});


//usage
//first: send or get data async
articleService.getArticles().then(function(resp){
    alert('called second');
    ...
});
// second: do something else, this will not wait for your response
alert('called first');