在我的 chrome 扩展中,我需要使用 chrome 存储。在我的后台脚本中,我首先创建一个对象并将其添加到 chrome 存储中,然后我想从那里获取我的对象并返回。像这样的东西:
...
var obj = {};
chrome.storage.local.set(obj, function () { });
...
var data = getData(obj); // I want my object to be returned here
var returnedData = null;
function getData(obj) {
chrome.storage.local.get(obj, function(result) {
returnedData = result; // here it works, I can do something with my object
});
return returnedData; // here it doesn't work
}
据我了解here https://stackoverflow.com/questions/16708564/converting-local-storage-to-chrome-storage-for-get-and-set chrome.storage.local.get
与其后果是异步的。但是有什么方法可以从 chrome 存储中获取某些内容并将其返回吗?我的意思是也许我应该包起来chrome.storage.local.get
在另一个函数中?
提前谢谢了!
如果您想远离全局变量并且可以满足现代浏览器的要求,那么您可以实现原生 JavaScript承诺对象 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise。例如,以下函数返回单个给定键的存储数据:
function getData(sKey) {
return new Promise(function(resolve, reject) {
chrome.storage.local.get(sKey, function(items) {
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError.message);
reject(chrome.runtime.lastError.message);
} else {
resolve(items[sKey]);
}
});
});
}
// Sample usage given this data:
// { foo: 'bar' }
getData('foo').then(function(item) {
// Returns "bar"
console.log(item);
});
如果您需要 IE11 及更低版本的支持,那么您必须求助于类似的库jQuery https://api.jquery.com/category/deferred-object/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)