gpt4 book ai didi

javascript - Angular 服务内的变量范围

转载 作者:行者123 更新时间:2023-12-03 09:11:33 25 4
gpt4 key购买 nike

我有一个自定义服务,它依赖于另一个服务,并且具有外部 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,
};
}

我对该服务有两个问题 - 一是当回调在三个 promise 完成后执行时,我不再将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 数组...这不是正确的处理方式。它应该在调用函数之前提供

function layerQueryer($http,$q,overlayLayersConf){
....
}
layerQueryer.$inject = ['$http','$q','overlayLayersConf'];

after the three promises are fulfilled I no longer have a reference to the overlayLayersConf service passed into the service constructor

你是如何发现这一点的?所提供的任何代码都不使用overlayLayersConf。这意味着它不会被保存到闭包中,因此在调试器中 overlayLayersConf 将在所有子调用中未定义。

第一个代码段中的

joinArrays 是一个私有(private)函数。只能从服务内部的代码访问它

关于javascript - Angular 服务内的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32061810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com