在具有UI状态

时间:2015-09-04 06:38:05

标签: javascript angularjs

我正在使用angular-ui-states,在点击模板之前,我必须解决一些HTTP请求。我目前的问题是准确承诺。

状态反应的例子:

resolve: {
  prepareData: function($q, setupService, $stateParams) {
      console.log('resolving');
      var deferred = $q.defer();
      setupService.fetchData($stateParams).then(function(response) {
          console.log('back, ', response);
          deferred.resolve();
          return deferred.promise;
      });
  }
}

在我的工厂:

services.factory('setupService', [ '...', '$q', function(..., $q) {
    return {
        fetchData: function(urlParams) {
            console.log('starting to validade');
            oneService.httpfunction().then(function (response) {
                if (response.status == 200) {
                    // do some non http stuff
                    // call another factory which makes a http request
                    anotherservice.anotherfunction().then(function (data) {
                        if (etc) {
                            return data;
                        } else if(etc) {
                            return data;
                        }
                    });
                }
            });
        }
    };
}]);

我的状态正确等待服务完成,但最后我不会回到状态解析(我永远不打印('回',响应)),基本上setupService.fetchData()没有得到价值回来了。我在工厂里也错过了$ q吗?对不起,我对$ q的了解并不大。感谢您的支持

更新

弄清楚出了什么问题。通过添加$ q.defer();在我的fetchData服务上,一切正常。因此,而不是return datadeferred.resolve(data),然后返回承诺。感谢您的支持

2 个答案:

答案 0 :(得分:0)

您必须在deferred.promise;功能后返回setupService.fetchData()

您的解决方案为空传递响应作为解决该问题的参数

deferred.resolve(response); //resolve response  

州决心

resolve: {
    prepareData: function($q, setupService, $stateParams) {
        console.log('resolving');
        var deferred = $q.defer();
        setupService.fetchData($stateParams).then(function(response) {
            console.log('back, ', response);
            deferred.resolve(response); // resolve response.
        });
    return deferred.promise; // return resolved promise...
  }
}

答案 1 :(得分:0)

弄清楚出了什么问题。通过添加$ q.defer();在我的fetchData服务上,一切正常。因此,不是返回数据,而是deferred.resolve(data),然后返回promise。感谢您的支持