如何使用$ resource时等到promise返回

时间:2015-05-01 15:54:52

标签: angularjs angular-services ngresource

我的控制器有一个激活方法,等待承诺在继续之前返回。

 /* Assign values to new properties. */
 private function initVars():void {
        rtmpUrl = FlexGlobals.topLevelApplication.loaderInfo.parameters.rtmpUrl;
        rtmpstreamName = FlexGlobals.topLevelApplication.loaderInfo.parameters.rtmpstreamName;

        Security.allowDomain("X.X.X.X");
 }

两个承诺都有类似的方法来获取数据,并且在datacontext.getNodeGroups()和datacontext.getNodes()方法中使用$ http。其中一个是这样的

        function activate() {
        var promises = [getNodesGroup(), getNodes()];
        common.activateController(promises, controllerId)
            .then(function () {
                log('Activated');
            });
    }

直到现在,当我尝试将$ resource用于其中一个承诺(getNodes())时,一切正常。我的节点资源就是这样设置的

        function getNodesGroup() {
        return datacontext.getNodeGroups().then(function (response) {
            $scope.nodeGroups = response.data;
           //other logic
        });

我试图像这样消费它

(function () {
'use strict';
var nodeServiceRoot = '/api/Nodes';

var GetAllNodesUrl = nodeServiceRoot + '/GetAllNodes';

angular.module('common.service')
.factory("nodeResource",["$resource","appSettings", nodeResource])
function nodeResource($resource, appSettings) {
    return $resource(appSettings.serverPath + GetAllNodesUrl);
}}());

我不知道如何返回getNodes()以便我的激活函数在继续之前等待它。现在发生的事情是,有时两个函数都会在命中日志时运行('Activated');激活函数的行,有时只运行旧的$ http方法(getNodeGroups()),但不运行另一个。

1 个答案:

答案 0 :(得分:1)

嗯,我猜答案非常简单。我在getNodes()中缺少'return' 那么对我有用的是

 function getNodes() {
    $scope.nodes = nodeResource.query();
  **return**  $scope.nodes.$promise.then(function (response) {
        $scope.nodes = response;
        //other logic
    });