我在同步做angularjs函數有一個大問題。 我已經嘗試過承諾和回調,但沒有一個可以工作。同步angularjs函數
initMap().then(function(result){
console.log("in initMap");
getLocation().then(function(result){
console.log("getLocation");
if(result){
getPlaces.getData(map,myLatlng).then(function(data){
Array = data;
console.log("markersArray = ", markersArray);
}).catch(function(){
console.log('testtesttest');
})
}else{
console.log("error in getLocation");
}
}).catch(function(){
console.log("getLocationError");
})
}).catch(function(error){
console.log("bbbbb");
})
函數 'initMap()' 有
{
var defer = $q.defer();
//Codes...
defer.resolve(data);
return defer.promise;
}
,從而功能 '的getLocation' 和.service'getPlaces'
然而,他們都異步進行的。 控制檯打印爲:
in initMap <-- 1
getLocation <-- 2
error in getLocation <-- 3
數1應該不被打印,直到initMap()得到解決。 因此,在解決getLocation之前不應打印第2和第3個數字,並檢查結果爲false或true。
我現在真的處於死路一條。
請幫忙。 任何建議都可以。 示例代碼非常感謝。
預先感謝您。
Pawas
編輯: 每種方法的代碼如下。
噢。我在離子平臺上做這個。 這是否會影響angularjs的工作方式? 以及如何解決該問題?
'initMap'
var mapOptions = {
center: myLatlng,
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var mapVar = new google.maps.Map(document.getElementById("map"), mapOptions);
$scope.map = mapVar;
console.log("initMap");
var defer = $q.defer();
defer.resolve('initMap');
return defer.promise;
'的getLocation'
var defer = $q.defer();
var suc = false;
navigator.geolocation.getCurrentPosition(function(pos){
myLatlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
$scope.map.setCenter(myLatlng);
suc = true;
},function(error){
suc = false;
},{
timeout: 12000
});
defer.resolve(suc);
return defer.promise;
'getPlaces':
Sorry, this one I can't post the code.
在當前的情況下發生了什麼,你只給了預期的結果..你還可以共享代碼'initMap','getLocation'和'getPlaces'嗎? –
它看起來像是根據你的描述做它應該做的。一個問題:'getLocation'中解析的值在'true'時被處理爲錯誤,這是否是正確的行爲? –
Pankaj Parkar:等幾分鐘。我將編輯 –