У меня есть пользовательская служба, которая имеет зависимость от другой службы и имеет внешние 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 непосредственно перед функцией - это то, что рекомендует руководство по стилю и более читаемо, поэтому, надеюсь, это не вызовет у меня никаких проблем. –