我遇到了问题,因为chrome api函数是异步的,我无法获得其返回值。请考虑以下代码。 我正在使用angularjs
$scope.storageGet = function(param) {
var returnData;
chrome.storage.local.get(param.storageName, function(data) {
returnData = data;
});
return returnData;
};
当我试图这样称呼它时:
console.log($scope.storageGet({'storageName': 'users'}));
它在控制台中打印'undefined'。我想看到的是存储在chrome存储中的用户的对象。好吧,我确信我有chrome存储数据。
答案 0 :(得分:6)
您无法返回由chrome.storage.local.get
等异步函数生成的数据,因为您的函数更有可能在执行异步函数之前完成执行。这就是您的函数返回undefined
的原因,returnData
是$scope.storageGet = function(param, callback) {
chrome.storage.local.get(param.storageName, function(data) {
callback(data);
});
};
的默认值。
一个很好的选择是通过使用回调函数使你的函数同步。
$scope.storageGet(param, function(returnData) {
// do something with returnData
});
现在你可以用这种方式调用你的函数:
{{1}}
答案 1 :(得分:6)
另一种方法是使用承诺。在这种情况下,它可能无关紧要,但如果你有很多嵌套回调,那么承诺会更好。
$scope.storageGet = function(param) {
var deferred = $q.defer();
chrome.storage.local.get(param.storageName, function(data) {
deferred.resolve(data);
});
return deferred.promise;
};
然后你这样称呼它。
$scope.storageGet(param).then(function (data) {
});