我真的很喜欢自动解包承诺的干净(而且我认为很容易遵循)方式:
$scope.myData = DataService.query({something:"etc"}); // done;
而且我真的不在乎现在似乎是标准的做法,没有自动展开:
DataService.query({something:"etc"}).$promise.then(function (data){
$scope.myData = data;
});
我想看到的是这样的:
$scope.pulseData = $scope.setPromise(CitsciAnalytics.pulse({
projId:"yardmap"
}));
但我看不出如何做到这一点。我得到的最接近的是:
$scope.pulseData = $scope.setPromise("pulseData", CitsciAnalytics.pulse({
projId:"yardmap"
}));
使用添加到根范围的函数:
.run(["$rootScope", "$log", function ($rootScope, $log) {
//parent method to avoid promise unwrapping boilerplate
$rootScope.setPromise = function (scopeVar, promise) {
if (arguments.length === 2 && promise && promise.$promise) {
var scope = this;
promise.$promise.then(function (data){
scope[scopeVar] = data;
});
} else {
$log.error("$rootScope.setPromise has invalid arguments");
}
};
}]);
但我不喜欢必须将范围变量名称作为附加字符串传递的 unDRY 要求。有没有其他人解决过这个问题,或者找到了一种更干净的方法?