Angularjs 解析routeprovider中已存在的异步变量

Angularjs 解析routeprovider中已存在的异步变量,angularjs,Angularjs,我有两个异步函数,我需要在routeProvider的resolve部分中解析其中一个。当用户在url上键入对象时,我希望自动添加startdate和enddate。我的问题是日期被推迟了。因为如果我在控制器中执行console.log(datetable),它表明dobject已正确解析。但这太晚了,我还需要调用ObjectService.get()的日期,因为现在它只搜索/object(生成404),而不搜索/object/startdate/enddate,因为变量为null。在调用Obj

我有两个异步函数,我需要在routeProvider的resolve部分中解析其中一个。当用户在url上键入对象时,我希望自动添加startdate和enddate。我的问题是日期被推迟了。因为如果我在控制器中执行console.log(datetable),它表明
dobject
已正确解析。但这太晚了,我还需要调用ObjectService.get()的日期,因为现在它只搜索/object(生成404),而不搜索/object/startdate/enddate,因为变量为null。在调用ObjectService.get()之前,如何解析日期

我的工厂和服务方法

.factory("ObjectService", ["$resource", function($resource) {
                return $resource('/:object/:startdate/:enddate');
            }])
            .service("CurrentDates", ["DateService", function(DateService) {
                this.dates = function() {

                    DateService.query().$promise.then(function(info) {
                        currentdates.startdate = info.start;
                        currentdates.enddate = info.end;
                    }).catch(onError);
                    return currentdates;
                }
            }])

            .factory("DateService", ["$resource", function($resource) {
                return $resource('dates.json');
            }])
我的路线提供者

$routeProvider
            .when('/:object', {
                templateUrl: "template/table.html",
                controller: 'ObjectController',
                resolve: {
                    datetable: ["ObjectService", "CurrentDates", "$route",
                        function(ObjectService, CurrentDates, $route) {
                            var dates = CurrentDates.dates(); // dates should already be resolved here if possible
                            return ObjectService.get(Object.assign($route.current.params, dates)).$promise
                                .catch(function(errorResponse) {
                                    return {
                                        "error": errorResponse.status,
                                        "object": $route.current.params.object,
                                        "dobject": Object.assign($route.current.params, dates)
                                    };
                                });
                        }
                    ],
                }
            })
我试着这样写,但没有成功

return CurrentDates.dates().then(function(dates) {
    return ObjectService.get(Object.assign($route.current.params, dates))
        .$promise.catch(function(errorResponse) {
            return {
                "error": errorResponse.status,
                "object": $route.current.params.object,
                "dobject": Object.assign($route.current.params, dates)
            };
        });
})

多亏克莱斯的提示,我成功地做到了。我必须将我的服务方法重写为:

.service("CurrentDates", ["DateService", function(DateService) {
            var currentdates = {
                startdate: null,
                enddate: null
            };
                this.dates = function() {
                    return  DateService.query().$promise.then(function(info) {
                        currentdates.startdate = info.start;
                        currentdates.enddate = info.end;
                        return currentdates;
                    }).catch(onError);
                }
            }])
然后我可以在routeProvider中解析变量datatable:

datetable:     ["ObjectService", "CurrentDates", "$route",
            function(ObjectService, CurrentDates, $route) {
                return CurrentDates.dates().then(function(dates) {
                    return ObjectService.get(Object.assign($route.current.params, dates))
                        .$promise.catch(function(errorResponse) {
                            return {
                                "error": errorResponse.status,
                                "object": $route.current.params.object,
                                "dobject": Object.assign($route.current.params, dates)
                            };
                        });
                })
            ]

CurrentDates
似乎没有
current()
函数。这可能是一个输入错误,您的意思可能是
CurrentDates.dates()
。但是,该函数并没有返回承诺,而是返回一个空对象,因为
DateService.query
是异步部分
resolve
需要接收promise对象,这意味着
。然后服务中的
需要打包,或者您需要打包
。然后
在其他地方执行逻辑。您将我带到了那里,修复了错误。关于“then”,我认为问题是这样的。我只是不知道该怎么做,但你的回答帮助我更好地理解这个问题。