我在尝试在我正在开发的Chrome扩展程序中实现Chrome keyboard shortcuts API时遇到了一个奇怪的问题。简而言之,我必须按指定的键盘快捷键2次才能更改存储值。
这是我的键盘快捷键侦听器:
chrome.commands.onCommand.addListener(function(command) {
chrome.storage.sync.get([command], function(result) {
toggle = result[command];
});
toggle = toggle_value(toggle)
chrome.storage.sync.set({[command]: toggle }, function() {
console.log( {[command]: toggle} );
});
});
我的toggle_value()
功能:
function toggle_value(value) {
if(value == 0) {
return 1;
} else if(value == 1) {
return 0;
}
}
我的键盘快捷键侦听器收到清单中设置的command
,从Chrome synced storage数据库中获取相同键名的相应值,切换值然后将其设置回Chrome同步使用相同的密钥名称存储。
如前所述,command
键的值仅在连续按下键盘快捷键2后才真正切换。我花了几个小时调试,没有运气,请帮助我。
答案 0 :(得分:1)
问题。您正在使用的函数是异步的,但您的代码是同步运行的。如果嵌套,您的代码应该有效。
chrome.commands.onCommand.addListener(function(command) {
chrome.storage.sync.get([command], function(result) {
toggle = result[command];
toggle = toggle_value(toggle);
chrome.storage.sync.set({[command]: toggle }, function() {
console.log( {[command]: toggle} );
});
});
});
建议。您应该考虑Promises
以更优雅地处理异步代码。