Chrome扩展程序键盘快捷键需要2次按下才能更改值

时间:2018-04-29 15:05:12

标签: javascript google-chrome google-chrome-extension

我在尝试在我正在开发的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后才真正切换。我花了几个小时调试,没有运气,请帮助我。

1 个答案:

答案 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以更优雅地处理异步代码。