gpt4 book ai didi

javascript - 复杂性大于 AngularJS Controller 中的授权(SonarLint 问题)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:53 26 4
gpt4 key购买 nike

我将 SonarLintEclipse 一起使用,并且我正在使用 AngularJS 编写应用程序。我的 Controller 有问题,所以我试图稍微清理一下以便看得更清楚,然后 SonarLint 向我弹出了一个问题:

Function has a complexity of 11 which is greater than 10 authorized.

这是我的 Controller 的代码:

app.controller('LauncherCtrl', function ($scope, $http) {

$scope.genStatus = "stopped";

$scope.startgenerator = function() {
$http.get('/start').success(function () {
$scope.updateStatus();
});
};

$scope.resumegenerator = function() {
$http.get('/resume').success(function () {
$scope.updateStatus();
});
};

$scope.suspendgenerator = function() {
$http.get('/suspend').success(function () {
$scope.updateStatus();
});
};

$scope.stopgenerator = function() {
$http.get('/stop').success(function () {
$scope.updateStatus();
});
};

$scope.updateStatus = function() {
$http.get('/status').success(function (response) {
$scope.genStatus = response.data;
});
};

$scope.updateStatus();
});

有什么问题吗?我假设这个问题是关于太多的嵌套循环/函数,但据我所知它不是(除了调用更新的函数开始/停止/恢复/暂停,但它不是复杂度 11,是吗?)。 + 我仔细检查了方括号/圆括号,我认为问题不在于此。

最佳答案

如果你想消除复杂性,你可以做一个功能:

    $scope.startgenerator = function() {
$http.get('/start').success(function () {
$scope.updateStatus();
});
};

$scope.resumegenerator = function() {
$http.get('/resume').success(function () {
$scope.updateStatus();
});
};

$scope.suspendgenerator = function() {
$http.get('/suspend').success(function () {
$scope.updateStatus();
});
};

$scope.stopgenerator = function() {
$http.get('/stop').success(function () {
$scope.updateStatus();
});
};

$scope.generatorAction = function(action) {
$http.get('/' + action).success(function () {
$scope.updateStatus();
});
};

然后像这样使用它:

$scope.generatorAction('stop');

或者使用处理您的 http 请求的服务,这是更好的做法。

编辑:

我正在为我的 Angular 应用程序使用此样式指南:https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md

为您的 http 请求创建一个简单的服务:

(function() {
'use strict';

angular
.module('yourModuleName')
.factory('generator', generatorFactory);

function generatorFactory($http) {

var service = {
start: start,
resume: resume,
suspend: suspend,
stop: stop
}

return service;

function start() {
return $http.get('/start');
}

function resume() {
return $http.get('/start');
}

function suspend() {
return $http.get('/suspend');
}

function stop() {
return $http.get('/stop');
}
}

})();

然后在你的 Controller 中:

app.controller('LauncherCtrl', function ($scope, generator, $http) {

$scope.genStatus = "stopped";

$scope.startgenerator = function() {
generator.start().then(function () {
$scope.updateStatus();
});
};

$scope.resumegenerator = function() {
generator.resume().then(function () {
$scope.updateStatus();
});
};

$scope.suspendgenerator = function() {
generator.suspend().then(function () {
$scope.updateStatus();
});
};

$scope.stopgenerator = function() {
generator.stop().then(function () {
$scope.updateStatus();
});
};

$scope.updateStatus = function() {
$http.get('/status').success(function (response) {
$scope.genStatus = response.data;
});
};

$scope.updateStatus();
});

首先,您的应用程序似乎需要更多代码和更多复杂性,但如果您需要在其他页面或组件/指令中停止生成器,您只需注入(inject)“生成器”服务并执行 generator.stop(); 通过这样做,如果有一天您的端点 url 发生了变化,您只需在您的服务中更改它们即可。

关于javascript - 复杂性大于 AngularJS Controller 中的授权(SonarLint 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38741051/

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