为什么从Promise`.then`中进行回调是一种反模式
我在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
服务返回promise,让.then
方法执行回调函数感觉像是对控件的不良转换。
一个人如何 这样和代码如何解释为什么原始的方式是
回答:
该代码可以按如下方式重构:
app.controller('tokenCtrl', function($scope, tokenService) { tokenService.getTokens.then ( callbackFn(tokens) {
$scope.tokens = tokens;
});
});
app.factory('tokenService', function($http) {
var getTokens = function() {
//return promise
return $http.get('/api/tokens').then (function onFulfilled(response) {
//return tokens
return response.data;
}
);
};
return {
getTokens: getTokens
};
});
通过使服务返回承诺,并使用承诺的.then
方法,可以实现相同的功能,并具有以下好处:
Promise可以保存并用于 。
可以保存承诺并用于避免重复同一
$http
呼叫。错误信息将保留并可以通过该
.catch
方法检索。承诺可以转发给其他客户。
以上是 为什么从Promise`.then`中进行回调是一种反模式 的全部内容, 来源链接: utcz.com/qa/399776.html