在等待promise时切换AngularJS视图

时间:2016-07-09 17:04:20

标签: javascript angularjs http view promise

我有以下代码(见下文),其中 MyCtrl1 是应用根据网址路由到的视图的控制器。控制器调用模型服务中的函数,该服务从http请求返回promise。该模型应该根据对控制器的响应和返回承诺,在另一个服务 responseService 中记录某些内容。如果http响应需要一段时间,我需要用户能够通过URL切换视图,并且仍然可以按要求处理模型,直到完成为止。这是我的问题:

如果用户在http请求的中间切换视图:

  1. MyCtrl1 消失,即用户下次切换回时 MyCtrl1 视图,它不会记住电话和 承诺不会退还给它,对吗?
  2. 模型服务是否仍在处理http请求和更新 responseService 收到回复后?
  3. 如果后者是“不”,我怎么能让它起作用?我需要用户 能够在http工作时切换视图。
  4. 谢谢!

    myctrl1.controller.js:

    angular.module('myApp')
        .controller('MyCtrl1', ['$scope', 'myModels', function ($scope, myModels) {
    
        myModels.listMyData().then(
            function(response) {
                ...
            },
            function(response) {
                ...
            }
        );
    }]);
    

    myModels.models.js:

    angular.module('myApp')
        .service('myModels', ['$http', '$q', 'responseService', function($http, $q, responseService) {
    
        this.listMyData = function() {
    
            var promise;
            ...
    
            $http.get('http://xxx.xxx.xxx').then(
                function(response) {
                   // register something in responseService
                   // assign promise
                },
                function(response) {
                   // register something in responseService
                   // assign promise
                }
            );
    
            return promise;   
        }
    
    }]);
    

1 个答案:

答案 0 :(得分:1)

您可以说javascript中的对象/函数只有在未被引用时才会被删除。当你打电话:

[JsonProperty(PropertyName = "id")]
public Guid Id { get; set; }              // Guid is used here, not string

[Version]
[JsonProperty(PropertyName = "version")]  // Needed? I assume the attribute is enough
public byte[] Version { get; set; }       // byte[] is used here, not string
现在引用了

$http.post(...).then(callback) 函数。因此它不会被删除,如果用户切换视图,它将执行忽略。 回答你的问题: 是的 2.是的