0
我有一個自定義服務,它具有對另一個服務的依賴並具有外部API和一些內部函數。角度服務中的變量範圍
angular.module('DashboardApp').factory('layerQueryer', layerQueryer);
function layerQueryer($http, $q, overlayLayersConf) {
layerQueryer.$inject = ['$http', '$q', 'overlayLayersConf'];
function joinArrays(array1, array2, keya, keyb) {
.....
};
function getLayerList() {
var def = $q.defer();
var Promise1 = dosomething();
var Promise2 = dosomethingelse();
var Promise3 = doanotherthing();
$q.all([Promise1, Promise2, Promise3])
.then(function (data) {
def.resolve('xxxx');
})
.
catch (function (error) {
console.log(error);
})
return def.promise;
};
return {
getLayerList: getLayerList,
};
}
我有兩個問題與此服務 - 一個回調執行時後三個履行諾言我不再需要傳遞到服務的構造函數,這是我需要的overlayLayersConf服務的引用,我也做當我需要在同一時間使用它時,沒有參考joinArrays。
我發現,如果我把JoinArrays功能到一個變量,使額外的兩個功能和揭發他們:
function getJoinArray(){
return joinArrays;
}
// for some reason this seems to allow the scope to be kept during the promise callback...
function getOverlayLayers(){
return overlayLayersConf;
}
return {
getJoinArray:getJoinArray,
getLayerList: getLayerList,
getOverlayLayers: getOverlayLayers,
};
然後,我可以得到這些變量的引用。這看起來很直觀但同時也很奇怪。誰能告訴我這裏發生了什麼?
我正在使用調試器 - 你是對的沒有太多的繼續,所以謝謝。我沒有意識到未使用的代碼沒有被插入到閉包回調中,但它是有道理的。謝謝。在函數之前也放入了$ inject - 這正是風格指南的建議,並且更具可讀性,所以希望不會引起更多問題。 –