boi*_*hos 6 javascript angularjs google-chrome-app
我有一个问题,因为chrome api函数是异步的,我不能得到它的返回值.请考虑以下代码.我正在使用angularjs
$scope.storageGet = function(param) {
var returnData;
chrome.storage.local.get(param.storageName, function(data) {
returnData = data;
});
return returnData;
};
Run Code Online (Sandbox Code Playgroud)
当我试图这样称呼时:
console.log($scope.storageGet({'storageName': 'users'}));
Run Code Online (Sandbox Code Playgroud)
它在控制台中打印'undefined'.我想看到的是存储在chrome存储中的用户的对象.好吧,我确信我有chrome存储数据.
您无法返回由异步函数生成的数据,例如chrome.storage.local.get,因为您的函数更有可能在执行异步函数之前完成执行.这就是你的函数返回的原因undefined,这是默认值returnData.
一个很好的选择是通过使用回调函数使您的函数同步.
$scope.storageGet = function(param, callback) {
chrome.storage.local.get(param.storageName, function(data) {
callback(data);
});
};
Run Code Online (Sandbox Code Playgroud)
现在你可以这样调用你的函数:
$scope.storageGet(param, function(returnData) {
// do something with returnData
});
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用承诺.在这种情况下,它可能无关紧要,但如果你有很多嵌套回调,那么承诺会更好.
$scope.storageGet = function(param) {
var deferred = $q.defer();
chrome.storage.local.get(param.storageName, function(data) {
deferred.resolve(data);
});
return deferred.promise;
};
Run Code Online (Sandbox Code Playgroud)
然后你就这样称呼它.
$scope.storageGet(param).then(function (data) {
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |