我想简化以下AngularJs
代码,特别是$q.defer()
和promise
方法。
我看到一个博客提供了一些错误使用$q.defer()
here的示例,并感谢您在下面重写我的代码时的输入和提示,以符合这种更简单的方法。
这是博客中的一个示例:
此:
var defer = $q.defer(); $http.get('options.json').success(function(result) { defer.resolve(result); }); return defer.promise;
可以更改为:
return $http.get('options.json').then(function(response) { return response.data; });
以下是来自3个不同服务的3个功能(让我们称之为#34;阶段"对于此示例),以返回相应的数据:
第1阶段:SocialMediaUserService
this.checkSocialMediaSubscription = function () {
var isSubscribed = $q.defer();
GetUserAccessService.returnBrandProfileID().then(function (brandProfileID) {
if (brandProfileID === 0) {
isSubscribed.resolve(false);
}
else {
isSubscribed.resolve(true);
}
});
return isSubscribed.promise;
};
第2阶段:GetUserAccessService
this.returnBrandProfileID = function () {
var brandProfileID = $q.defer();
if (angular.isUndefined($sessionStorage.brandProfileID)) {
GetDataService.getItems('GetUserAccess/' + $cookies.get('authenticationID'))
.success(function (accessObject) {
$sessionStorage.brandProfileID = accessObject.FusewareID;
brandProfileID.resolve(accessObject.FusewareID);
})
.error(function (error, status) {
console.error('Fuseware API error: ' + error + ' Status message: ' + status);
});
}
else {
brandProfileID.resolve($sessionStorage.brandProfileID);
}
return brandProfileID.promise;
};
第3阶段:GetDataService
.factory('GetDataService', ['$http', 'WebServiceURL', function ($http, WebServiceURL) {
var DataFactory = {};
DataFactory.getItems = function (ServiceParameter) {
console.log(WebServiceURL + '/' + ServiceParameter);
return $http.get(WebServiceURL + '/' + ServiceParameter, { cache: true });
};
return DataFactory;
}
答案 0 :(得分:1)
一般情况下,如果您已经在函数中使用了承诺并且使用了承诺链接,那么您应该省略$ q.defer。
我将举例说明你的第一阶段:
function () {
return GetUserAccessService.returnBrandProfileID().then(function (brandProfileID) {
if (brandProfileID === 0) {
return false;
}
else {
return true;
}
});
}
我们在这里使用的是你可以使用" return"在 .then 函数回调中,它将在内部解析 .then 返回的承诺。这就是为什么我们可以在main函数中返回链式promise而不是$ q.defer()。
添加:这样看:你在 .then 回调中返回的任何值都将包含在Promise.resolve中,这将创建一个基于承诺的关于价值,当它还不是一个时。