我如何使用Promise或Defer来完成此任务?

时间:2015-04-10 14:45:48

标签: javascript angularjs

我有一个app.run()块:

  • 使用Angular服务,该服务使用$http.get获取某些值并在$rootScope

  • 中设置它们
  • 调用另一个使用$http.get

  • 中的值的Angular组件

问题是第二步中的代码在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

2 个答案:

答案 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

    };

  }]);
};