我正在使用离子框架。我有多个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?
由于
答案 0 :(得分:1)
尝试使用html5 web worker你需要做的是多线程,因为javascript是单线程环境,你需要web worker
答案 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');