我有一个app.run()
块:
使用Angular服务,该服务使用$http.get
获取某些值并在$rootScope
调用另一个使用$http.get
问题是第二步中的代码在HTTP调用回复第一步中的值之前运行。我不希望第二步中的代码直接调用服务。
如何强制第二步等待第一步完成?
service.js
function getSomeConfigs() {
var promise = $http.get('/blah');
$rootScope.promise = promise
.then(function () {
$rootScope.someVariable = data.someVariable;
});
}
helper.js
$rootScope.someVariable
is undefined
答案 0 :(得分:1)
您必须将这两个步骤链接起来:
$http.get('restAddress')
.then(function(result) {
$scope.myResult = result.data;
})
.then(function() {
MyFunctionIndirectlyDependingOnPreviousResult();
});
您甚至可以将来自MyFunctionIndirectlyDependingOnPreviousResult()
的来电置于第一个then()
回调中:
$http.get('restAddress')
.then(function(result) {
$scope.myResult = result.data;
MyFunctionIndirectlyDependingOnPreviousResult();
});
答案 1 :(得分:1)
$ HTTP服务返回一个承诺。 所以只需将$ http.get的返回值设置为var,就可以使用.then方法。 例如
//Controller
....
//appSvc.get is a call to your .factory or .service that returns the promise
var inputUrl = "myUrl/REST/";
var promise = appSvc.get(inputUrl);
promise.then(function (data) {
//DO SOMETHING WITH Returned DATA
}
...
//SERVICE
'use strict';
module.exports = function (ngModule) {
ngModule.factory('appSvc', ['$http', function ($http) {
function epicUniverse (inputUrl) {
return $http.get(inputUrl);
}
return {
get:epicUniverse
};
}]);
};