Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS服务,返回预加载的数据或$html.get中的数据_Javascript_Angularjs_Deferred - Fatal编程技术网

Javascript AngularJS服务,返回预加载的数据或$html.get中的数据

Javascript AngularJS服务,返回预加载的数据或$html.get中的数据,javascript,angularjs,deferred,Javascript,Angularjs,Deferred,我希望能够从angular服务返回预加载的数据,如果它已经存在,如果没有,我希望从web服务获取数据 显然,其中一个操作是同步的,另一个不是,所以我想用异步的方式包装简单的返回,这样我就不必在控制器中有很多if…else块 我已经尝试使用延迟api,如下所示 worksOrdersApp.factory("WorksOrderService", function ($http, $q) { var _jobs = []; var newWorksOrders = functio

我希望能够从angular服务返回预加载的数据,如果它已经存在,如果没有,我希望从web服务获取数据

显然,其中一个操作是同步的,另一个不是,所以我想用异步的方式包装简单的返回,这样我就不必在控制器中有很多if…else块

我已经尝试使用延迟api,如下所示

worksOrdersApp.factory("WorksOrderService", function ($http, $q) {
    var _jobs = [];

    var newWorksOrders = function () {
        var deferredJobs = $q.defer();
        if (_jobs.length === 0) {
            return $http.get('/api/WorksOrders/GetNew').success(function(data) {
                deferredJobs.resolve(data);
            });
        } else {
            deferredJobs.resolve(_jobs);
        }

        return deferredJobs.promise;
    };

    return {
        getNewWorksOrders: newWorksOrders,
    };
});
然后在我的控制器中,它应该是一个调用

 WorksOrderService.getNewWorksOrders().then(function (data) {
     $scope.values = data;
 });
这在一开始似乎是可行的,服务中
数据的值是我所期望的数组。但是,在调用
deferredJobs.resolve()
之后,当我检查控制器中
data
的值时,它是一个http响应对象,包含状态代码的详细信息和一个单独的
data.data
属性,其中包含数组。这仍然意味着我必须在控制器中使用if…else代码来检查
数据
是数组还是http响应


如何将阵列传回控制器?

通常,只要我提出问题,我就能找到答案

if(_jobs.length==0)
块中,我返回
$http.get
,而不是执行它并允许承诺返回结果

这正是我所期望的

if (_jobs.length === 0) {
    $http.get('/api/WorksOrders/GetNew').success(function(data) {
        _jobs = data; // I also forgot this line, without it _jobs will always be empty and the else block will never execute
        deferredJobs.resolve(data);
    });
} else {
    deferredJobs.resolve(_jobs);
}

典型的情况是,我一问这个问题就发现了答案

if(_jobs.length==0)
块中,我返回
$http.get
,而不是执行它并允许承诺返回结果

这正是我所期望的

if (_jobs.length === 0) {
    $http.get('/api/WorksOrders/GetNew').success(function(data) {
        _jobs = data; // I also forgot this line, without it _jobs will always be empty and the else block will never execute
        deferredJobs.resolve(data);
    });
} else {
    deferredJobs.resolve(_jobs);
}