Извлечение значения из локального хранилища Chrome без присвоения значения локальной переменной

1

Я создаю расширение Chrome с помощью React. Во время входа в систему я сохраняю имя пользователя и для какой-либо другой операции, мне нужно извлечь его в файл background.js, содержимое которого находится ниже:

/* globals chrome */

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        let username;
        if (request.data.type == "SENDTRANSACTION") {
            chrome.storage.sync.get(['username'], (response) => {
                    console.log(response.username)
                    username = response.username // This is not being set on first invocation
            });
            console.log(username);
            sendResponse({message: "Sent values to Server"});
        }
    });

Значение имени username не undefined. Я что-то пропустил?

  • 0
    Сделано несколько правок. Его всегда undefined
  • 0
    Вы устанавливаете username с chrome.storage.sync.set
Показать ещё 6 комментариев
Теги:
google-chrome-extension

1 ответ

1
Лучший ответ

Попробуй это:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    let username;
    if (request.data.type == "SENDTRANSACTION") {
        chrome.storage.sync.get(['username'], (response)=>{
            username = response.username
            // This is not being set on first invocation

            console.log(username);
            sendResponse({
                message: "Sent values to Server"
            });
        });
        return true;
    }
});

chrome.storage.sync.get требуется время для загрузки данных из хранилища, поэтому ваш sendResponse перед обратным вызовом (set username = response.username)

Проверить время выполнения # event-onMessage

Эта функция становится недействительной, когда приемник событий возвращается, если вы не вернете true из прослушивателя событий, чтобы указать, что вы хотите отправить ответ асинхронно

  • 0
    это решение исправило то, с чем я столкнулся здесь. но message от sendResponse проверялось в chrome.runtime.sendMessage (это метод, который вызывал эту конкретную функцию с request.data.type = "SENDTRANSACTION"), и теперь он undefined
  • 0
    Можете ли вы сказать мне, что thatnow that is undefined )?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню