我正在使用angular& amp;创建chrome扩展。试图使用chrome.storage设置&获取随机生成的id,但在“get”没有获得该id时,下面是我的代码:
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;
}
});
}
}]);
因此,当我在我的控制器中调用此getUniqueId时,我得到了未定义,我也使用了超时思想,因为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 :(得分: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);
});
}]);