5

私は、promise が自動アンラップされたクリーンな (そして従うのは簡単だと思う) 方法が本当に気に入っています。

$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 要件は好きではありません。他の誰かがこれに取り組みましたか、またはこれをよりきれいにする方法を見ましたか?

4

2 に答える 2