我有一个问题困扰了我很久。函数好像chrome.storage.sync有某种保护机制什么的,或者只是作用域的问题,不清楚。
我正在编写一个应用程序,我已经问过有关保存数据方法的问题,但仍然有必要缩短代码,以便将类型chrome.storage.sync.get()或类型的函数chrome.storage.sync.set()连接到单独的函数中,如下所示:
function get_option_storage(option_name) {
var result = false;
chrome.storage.sync.get( option_name, function(func_result) {
result = func_result;
});
return result;
}
并安装
function set_option_storage(option_name, option_value) {
var result = false;
chrome.storage.sync.set( {option_name: option_value}, function() {
result = true;
});
return result;
}
我之所以来到这里是因为保存和读取存储数据的请求很多,所以我想将使用存储的方法缝合到单独的函数中并调用我自己的函数,这怎么能做到并且有可能吗?
几乎所有
chrome.*具有回调的方法都是异步的。因此,异步方法不返回任何数据。这不是一种保护机制,甚至不是一个范围——这是一个为提高 JavaScript 脚本速度而引入的特性。关于什么是异步方法,我想我在这个问题的答案中以通俗易懂的方式解释了:在页面和 VK API 上搜索元素。如果有兴趣,然后阅读。
可以做什么:
使用承诺。关于这个主题的文章:
使用 Mozilla 的预建 polyfill 解决方案:mozilla/webextension-polyfill。它有点原始,但添加 Promises 支持非常容易。请注意,此 polyfill 并未涵盖所有方法(一些不受欢迎的方法将不得不手动添加),并且还对 API 进行了轻微更改。
但是像 get* 这样的自定义函数,通过 返回一些东西
return,还是要放弃。我唯一可以建议的是重建应用程序结构或使用回调而不是return.