0

&を使用してchrome.storageを使用して&を設定しようとしたときに、ランダムに生成されたIDを取得するが、そのIDを取得しないときに、以下の私のコードです:私は未定義取得しています私のコントローラでこのgetUniqueIdを呼び出すときchrome.storage.sync.get値が返されない - 角型サービス

angular.module('chromeExtension') 
.service('customService', ['$window', '$timeout', function ($window, $timeout) { 
    this.getUniqueId = function() { 
     return chrome.storage.sync.get('unique_app_id', function(data) { 
      console.log(data.unique_app_id); // Here I am getting the id 
      if(data.unique_app_id) { 
       return data.unique_app_id; 
      } else { 
       uniqueId = Math.round((Math.pow(36, 20 + 1) - Math.random() * Math.pow(36, 20))).toString(36).slice(1); 
       chrome.storage.sync.set({'unique_app_id': uniqueId}); 
       return uniqueId; 
      } 
     }); 
    } 
}]); 

だから、私も使用されるタイムアウトは、それが理由ではなく運かもしれないのでchrome.storage.syncは、非同期呼び出しであるので、思いました。以下は、私はその関数を呼び出しています私のコントローラである:

angular.module('chromeExtension') 
.controller('sampleController',['$scope', 'customService', function ($scope, customService) { 
    $scope.uniqueId = customService.getUniqueid(); 
    console.log("Unique: ", $scope.uniqueId); // this is giving me undefined or null 
}]); 
+0

未定義とは何ですか? 'chrome.storage'または' data.unique_app_id'ですか?前者の場合は、 'storage'パーミッションを宣言していますか? –

+0

getUniqueIdの呼び出し時の戻り値は未定義です。その値はdata.unique_app_idでなければなりません&yes私は許可を宣言しました –

+0

'chrome.storage.sync.get'は非同期呼び出しであるため、' getUniqueId' ? –

答えて

1

chrome.storage.sync.getは、非同期呼び出しで、あなたは直接の結果を得ることができません。

回避策の一つは、コールバックを追加し、コールバックでconsole.logを呼ぶことだろう、私はangular.jsに慣れていないんだが、サンプルコードは次のようになります。

angular.module('chromeExtension') 
.service('customService', ['$window', '$timeout', function ($window, $timeout) { 
    this.getUniqueId = function(callback) { 
     return chrome.storage.sync.get('unique_app_id', function(data) { 
      console.log(data.unique_app_id); // Here I am getting the id 
      if(data.unique_app_id) { 
       callback(data.unique_app_id); 
      } else { 
       uniqueId = Math.round((Math.pow(36, 20 + 1) - Math.random() * Math.pow(36, 20))).toString(36).slice(1); 
       chrome.storage.sync.set({'unique_app_id': uniqueId}); 
       callback(uniqueId); 
      } 
     }); 
    } 
}]); 


angular.module('chromeExtension') 
.controller('sampleController',['$scope', 'customService', function ($scope, customService) { 
    customService.getUniqueId(function(uniqueId) { 
     console.log("Unique: ", uniqueId); 
    }); 
}]); 
+0

ありがとうございました... –

関連する問題