私は2つの非同期関数を持っています。それらのうちの1つを既にrouteProviderの解決セクションに解決する必要があります。ユーザーがURLにオブジェクトを入力すると、開始日と終了日が自動的に追加されます。私の問題は、日付が遅く解決されたことです。コントローラーでconsole.log(datetable)を実行すると、dobject
が正しく解決されたことが示されるためです。しかし、これは遅いです、私は変数がnullのため、/ object/startdate/enddateではなく、/ object(404を生成する)を検索しているので、ObjectService.get()を呼び出す日付も必要です。 ObjectService.get()を呼び出す前に日付を解決するにはどうすればよいですか?すでにrouteproviderにある非同期変数の解決
私の工場やサービスメソッド
.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
$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)
};
});
}
],
}
})
私はこのようにそれを書くことを試みたが、それは仕事をdidntの。
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)
};
});
})
:その後、私はrouteProviderで変数のDataTableを解決することができ
:私はに私のserviceメソッドを書き換える必要がありました。それはタイプミスかもしれないし、あなたは 'CurrentDates.dates()'を意味するかもしれない。しかし、その関数は約束を返していないので、 'DateService.query'が非同期部分であるため、空のオブジェクトを返しています。 'resolve'は約束オブジェクトを受け取る必要があります。つまり、あなたのサービスの' .then'はラップする必要があります。そうでなければ、 '.then'ロジックを別の場所で実行する必要があります。 – Claies
あなたはそこに私を持って、間違いを修正しました。 「当時」について、私は問題がそういうものだと思った。私はちょうどそれを正確に行う方法がわかりませんが、あなたの答えは私が問題をより良く理解するのに役立ちます。 – member2