Сочетание клавиш расширения Chrome занимает 2 нажатия, чтобы изменить значение - PullRequest
0 голосов
/ 29 апреля 2018

У меня странная проблема, связанная с реализацией сочетаний клавиш Chrome API в разрабатываемом расширении Chrome. Короче говоря, я должен нажать назначенное сочетание клавиш 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 Sync Storage , переключает значение, а затем устанавливает его обратно в Хромированное хранилище с тем же именем ключа.

Как указывалось ранее, значение клавиши command действительно переключается только после двухкратного нажатия сочетания клавиш. Я потратил часы на отладку безуспешно, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 29 апреля 2018

Проблема. Используемые вами функции асинхронны, но ваш код работает синхронно. Ваш код должен работать, если он вложенный.

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 для более элегантной обработки асинхронного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...