私のアプリケーションのグローバル依存関係を設定するためのこの初期化関数があります.npmパッケージangular-global-resolveを使用しています。パッケージはうまく動作しますが、問題は初期化関数でネストされた約束を持っていて、ネストされたものより先に解決されるという大きな約束があります。つまり、アプリケーションが初めて実行されるときに特定のものが設定されません。これをどうやって解決するのですか?解決の前にプロンプトがネストの約束を待っているのではない
マイコード:
routes.jsで :
globalResolveProvider.addGlobalDependenciesTo($stateProvider, {
getGlobalDependacies: function ($http, $rootScope, $cookies) {
return $http.get('/__/env.json')
.then(function(response) {
console.log('then0')
$rootScope.apiUrl = response.data.apiUrl;
$rootScope.googleMapsApiKey = response.data.googleMapsApiKey;
$rootScope.currentLocationLat = 40.7589;
$rootScope.currentLocationLng = 73.9851;
var hotelId = ''
if ($cookies.get('hotel') === undefined){
console.log('if 1')
$http.get($rootScope.apiUrl + '/hotels')
.then(function(dbHotels){
console.log('then1')
hotelId = dbHotels.data[0]._id
$cookies.put('hotelId', hotelId)
})
}
if ($cookies.get('userId') === undefined){
console.log('if 2')
$http.get($rootScope.apiUrl + '/users')
.then(function(dbUsers){
console.log('then2')
var index = dbUsers.data.length - 1
var userId = dbUsers.data[index]._id
$cookies.put('userId', userId)
$rootScope.$broadcast('update-itinerary-icon')
})
}
})
.then(function(){
console.log("parent then is resolved")
})
}
})
コンソールがログインしている:
then0
if 1
if 2
parent then is resolved
then1
then2
なぜ親は、その後then1
とthen2
前に解決していますか?あなたは
$http.get($rootScope.apiUrl + '/hotels')
それとも行うと
どこに.then?私はこれを試みたが、動作していないようだ:$ q.allを返す($ cookies.get( 'hotel')===未定義)?$ http.get($ rootScope.apiUrl + '/ hotels')。 $ q.resolve() – jmona789
Hm、それは(つまり、(dbHotels){console.log( 'then1')hotelId = dbHotels.data [0] ._ id $ cookies.put( 'hotelId'、hotelId)}) – Birchlabs
あなたは何のエラーもなく、それはまだ順不同で起こっていることです。私は終わりました。とにかく別の方法では、実際には最初のものに2つの約束事を入れ子にする必要はなかったので、最初のものの後に2つのthens()を作成し、 'return $ http.get(..)あなたのお手伝いをありがとう。 – jmona789