gpt4 book ai didi

javascript - 为什么来自 Promise `.then` 方法的回调是一种反模式

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:00 25 4
gpt4 key购买 nike

我在 StackOverflow 上看到了人们建议为 AngularJS 服务提供回调函数的答案。

app.controller('tokenCtrl', function($scope, tokenService) {
tokenService.getTokens(function callbackFn(tokens) {
$scope.tokens = tokens;
});
});

app.factory('tokenService', function($http) {
var getTokens = function(callbackFn) {
$http.get('/api/tokens').then (function onFulfilled(response) {
callbackFn(response.data);
});
};

return {
getTokens: getTokens
};
});

在我看来,这似乎是一种反模式。 $http 服务返回 promises 并让 .then 方法执行回调函数感觉像是一种不健康的控制反转。

如何重构这样的代码以及如何解释为什么原来的方法不是一个好主意?

最佳答案

你应该把它改成

var getTokens = function() {
return $http.get('/api/tokens');
};

然后在其他模块中使用

yourModule.getTokens()
.then(function(response) {
// handle it
});

至于为什么它是一种反模式,我想说的是,首先,它不允许您进一步链接成功/失败处理程序方法。其次,它控制处理从调用者模块到被调用模块的响应(这在这里可能不是非常重要,但它仍然强加相同的控制反转)。最后,你在你的代码库中添加了 promise 的概念,这对于一些队友来说可能不太容易理解,但是然后使用 promises 作为回调,所以这真的没有意义。

关于javascript - 为什么来自 Promise `.then` 方法的回调是一种反模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35660881/

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