Я создаю расширение 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
. Я что-то пропустил?
Попробуй это:
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 из прослушивателя событий, чтобы указать, что вы хотите отправить ответ асинхронно
message
от sendResponse проверялось в chrome.runtime.sendMessage
(это метод, который вызывал эту конкретную функцию с request.data.type = "SENDTRANSACTION"), и теперь он undefined
that
(в now that is undefined
)?
undefined
username
сchrome.storage.sync.set