使用其他工厂

时间:2016-04-18 07:41:10

标签: angularjs angularjs-routing

在加载状态之前,我希望使用其他工厂的数据解析工厂。

我的情况:

"taskVariables": function (getTask, getTaskVariables, $stateParams) {
      getTask.get({'task': $stateParams.taskId}).success(function(data) {
         console.log("I'm here");
         return getTaskVariables.get({'processInstanceId': data.processInstanceId});
      });
      return false;
      console.log("I have failed you master")
  },

厂:

.factory('getTask', function ($resource) {
        return $resource('api/task/get/:task', {'user': '@user', 'task': '@task'}, {
            'get': {
                method: 'GET',
                transformResponse: function (data) {
                    data = angular.fromJson(data);
                    return data;
                }
            }
        })
    })

问题是我认为一个工厂的加载速度比另一个工厂快,因此在页面加载时数据将是未定义的,但这只是我推测的。

有没有办法通过承诺或某种方式实现这一目标?

提前致谢,

2 个答案:

答案 0 :(得分:1)

因为我返回$资源我不能声明成功或失败函数,所以你需要通过给它一个$ promise来改变它,然后是一个然后:

"taskVariables": function (getTask, getTaskVariables, $stateParams) {
       return getTask.get({'task': $stateParams.taskId}).$promise.then(function(data) {
              return getTaskVariables.get({'processInstanceId': data.processInstanceId});
       });
}

感谢this提问/回答

答案 1 :(得分:0)

您忘记返回初始的getTask承诺。

"taskVariables": function (getTask, getTaskVariables, $stateParams) {
    return getTask.get({'task': $stateParams.taskId}).success(function(data) {
        console.log("I'm here");
        return getTaskVariables.get({'processInstanceId': data.processInstanceId});
    });
},