【发布时间】:2017-05-10 20:19:28
【问题描述】:
我有两个异步函数,我需要在 routeProvider 的解析部分解决其中一个。当用户在 url 上键入对象时,我想自动添加开始日期和结束日期。我的问题是日期解决得很晚。因为如果我在控制器中执行 console.log(datetable),它表明 dobject 已正确解析。但这为时已晚,我还需要调用 ObjectService.get() 时的日期,因为现在它只搜索 /object(产生 404)而不是 /object/startdate/enddate,因为变量为空。在调用 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)
};
});
})
【问题讨论】:
-
CurrentDates似乎没有current()函数。这可能是一个错字,你的意思可能是CurrentDates.dates()。但是,该函数没有返回一个承诺,它返回一个空对象,因为DateService.query是异步部分。resolve需要接收 promise 对象,这意味着您的服务中的.then要么需要被包装,要么您需要在其他地方执行.then逻辑。 -
你把我弄到了那里,修正了错误。关于'then',我认为问题是这样的。我只是不确定该怎么做,但是您的回答可以帮助我更好地理解问题。
标签: angularjs