0

クライアント側で計算するハッシュを必要とする API からいくつかの情報を取得する必要がありますが、完了するまでにかなりの時間がかかります。角度サイクルと同期できませんでした。できることは、タイムアウトを設定してハッシュを計算することでしたが、現在はハッシュを取得して情報を取得していますが、角度サイクルが壊れているため、使用できますそれ。

私たちは角度 (1.0.7) を使用したばかりで、何かが足りないことを知っています。

いくつかの明らかな部分を省略してコードを更新してください。そうでない場合はお知らせください。

https://code.google.com/p/javascript-bcrypt/と依存関係が適切に読み込まれるため、ハッシュを計算するサービスを作成しました (もう 1 つ、これはハッシュが 1 回だけ計算されるために必要です)。

.service('hashSrv', function(SALT, $q, $timeout) {
    var bcrypt, token = '', secure = '', deferred = $q.defer();

    bcrypt = new bCrypt();
    token = Base64.encode("Sometoken");

    return {
        generate: function() {
            bcrypt.hashpw(token, SALT, function(hash) {
              secure = hash;
            });  
        },
        getSecure: function() {
            return secure;
        },
        getToken: function() {
            return token;
        },
        getData: function() {
            return {
                'token': token,
                'secure': secure
            }
        }
    }
})

ここに私たちの工場のリソースがあります:

.factory('InfoSrv', function ($http, RESOURCE_URL, HashSrv, $timeout) {
    return $timeout( function() {
        $http({method: 'GET', url: 'RESOURCE_URL?token=' + HashSrv.getToken() + '&secure=' + HashSrv.getSecure()})
        .success(function(response, data, status, headers, config) {
            //Here we have the correct response
        })
        .error(function(response, data, status, headers, config) {
            //Check if something bad happens
        });
    }, 200);
})

そして最後に、コントローラーでそれを使用しようとしています

.controller('DataCtrl',
    ['$scope', 'InfoSrv', 
    function ($scope, InfoSrv) {
        $scope.user.basicInformation = $scope.getBasicInfo();
        //Here we can get the info :(
    }
])
4

2 に答える 2

1

$timeout サービスは promise を返します。promise が解決される値は、$timeout に渡される関数内で返されるものです。あなたの場合、$timeout 内で何も返していません。

$timeout が必要な理由もわかりません。プロミスも返す $http() を返すだけです。次に、success,error メソッドをサービスの外に移動します。

于 2013-08-16T17:50:04.187 に答える