承諾

2016-11-20 94 views
1

在我的控制器的深入理解,我有一個分支陣列,其中我需要通過迭代分支六角追加含有LAT長即我這樣做它的每個項目承諾

{ 
     "BANK": "B N P PARIBAS", 
     "IFSC": "BNPA0009009", 
     "MICR CODE": "400034002", 
     "BRANCH": "MUMBAI", 
     "ADDRESS": "FRENCH BANK BLDG.,62, HOMJI STREET, MUMBAI - 400 001", 
     "CONTACT": "0", 
     "CITY": "MUMBAI", 
     "DISTRICT": "MUMBAI", 
     "STATE": "MAHARASHTRA", 
     "ZIPCODE": "400 001", 
     "location": { 
      lat: , 
      long: 
     } 
    }, 

位置對象forEach並在forEach循環內的每個項目上調用getLatLong函數。

但是,函數的控制/執行是這樣的,它在服務調用獲得任何結果之前返回deferred.promise。理想情況下,我想從Google Maps API獲取位置對象,然後當它解析時,我想將結果返回給控制器函數getLatLong並返回該位置對象,然後將該對象分配給forEach循環中的item.location。

我控制器

module.exports = function(AppFactory, $q){ 
'use strict'; 

let ctrl = this; 
ctrl.showList = true; 
ctrl.branches = [ 
    { 
     "BANK": "B N P PARIBAS", 
     "IFSC": "BNPA0009008", 
     "MICR CODE": "700034002", 
     "BRANCH": "KOLKATA", 
     "ADDRESS": "UNIT NO. 301, OFFICE NO. 2, 3RD FLOOR, AVANI SIGNATURE,91A/1, PARK STREET,KOLKATA :- 700016", 
     "CONTACT": "0", 
     "CITY": "KOLKATA", 
     "DISTRICT": "KOLKATA", 
     "STATE": "WEST BENGAL", 
     "ZIPCODE": "700016" 

    }, 
    { 
     "BANK": "B N P PARIBAS", 
     "IFSC": "BNPA0009009", 
     "MICR CODE": "400034002", 
     "BRANCH": "MUMBAI", 
     "ADDRESS": "FRENCH BANK BLDG.,62, HOMJI STREET, MUMBAI - 400 001", 
     "CONTACT": "0", 
     "CITY": "MUMBAI", 
     "DISTRICT": "MUMBAI", 
     "STATE": "MAHARASHTRA", 
     "ZIPCODE": "400 001" 
    }, 
    { 
     "BANK": "B N P PARIBAS", 
     "IFSC": "BNPA0009065", 
     "MICR CODE": "110034002", 
     "BRANCH": "DELHI", 
     "ADDRESS": "1ST FLOOR EAST TOWER (SOOD TOWER), 25, BARAKHAMBA ROAD,NEW DELHI :- 110001", 
     "CONTACT": "0", 
     "CITY": "DELHI", 
     "DISTRICT": "DELHI", 
     "STATE": "DELHI", 
     "ZIPCODE": "110001" 
    }, 
    { 
     "BANK": "B N P PARIBAS", 
     "IFSC": "BNPA0009067", 
     "MICR CODE": "560034002", 
     "BRANCH": "BANGALORE", 
     "ADDRESS": "3RD FL,LANDMARK,21/15,M.G.ROAD,BANGLORE-560 001", 
     "CONTACT": "0", 
     "CITY": "BANGALORE", 
     "DISTRICT": "BANGALORE", 
     "STATE": "KARNATAKA", 
     "ZIPCODE": "560 001" 
    }, 
    { 
     "BANK": "B N P PARIBAS", 
     "IFSC": "BNPA0009069", 
     "MICR CODE": "411034002", 
     "BRANCH": "PUNE", 
     "ADDRESS": "5 & 6,GODREJ MILLENIUM PARK,9,KOREGAON ROAD,PUNE-411 001", 
     "CONTACT": "0", 
     "CITY": "PUNE", 
     "DISTRICT": "PUNE", 
     "STATE": "MAHARASHTRA", 
     "ZIPCODE": "411 001" 
    } 
] 


// console.log(ctrl.branches); 
function getLatLong(addressOrZip){ 

    let results; 
    let deferred = $q.defer(); 
    AppFactory.getLatLong(addressOrZip).then(function(res){ 
     console.log(res); 
     deferred.resolve(res); 
     // if(res.results.length > 0){ 
     //  results = res.results[0].geometry.location; 
     // }else{ 
     //  results = res.results; 
     // } 
     // return results; 
    }, function(error){ 
     deferred.reject(res); 
    }); 

    return deferred.promise; 

} 

ctrl.toggleViews = function(){ 
    ctrl.showList = !ctrl.showList; 

    if(!ctrl.showList){ 
     angular.forEach(ctrl.branches, function(item){ 
      let location = getLatLong(item.ZIPCODE); 
      console.log(location); 
      // let location = getLatLong(item.ADDRESS || item.ZIPCODE); 

      // if(location){ 
      //  item.location = location; 
      // } 
     }) 

     console.log("Logging branches with location object..."); 

     console.log(ctrl.branches); 
    } 
} 

}

然後在我的AppFactory

let getLatLong = function(location){ 
    // let defferred = $q.defer(); 
    return $http({ 
     url: "https://maps.googleapis.com/maps/api/geocode/json?address="+ location +"&key=AIzaSyDGyOrnNj8rrRFR92m6BEMvR24JiYoHtMs" 
    }).then(function(response){ 
     return response.data; 
     // defferred.resolve(response.data); 
    }, function(error){ 
     return error; 
     // defferred.reject(error); 
    }); 

    // return defferred.promise; 
} 

我怎樣才能解決這個得到什麼?

回答

0

getLatLong()返回一個承諾(這是什麼$http回報),所以你需要使用then()對返回的承諾訪問響應數據

變化:

let location = getLatLong(item.ZIPCODE); 
console.log(location); 

要:

getLatLong(item.ZIPCODE).then(function(data){ 
    item.location = data; 
    console.log(item.location); 
}); 

將由您來驗證該錯誤未返回到此then()

+0

是的,確實..! – kushalvm