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 - 这正是风格指南的建议,并且更具可读性,所以希望不会引起更多问题。 –