@MikMik

Как получить значение переменной?

const baseName      = "base";
const eventStore    = "events";
const ticketStore   = "tickets";

var db;
var eventStatus;

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        if (request.command == "addEvent") {
            console.log('cklick');
            addEvent(request.eventData);
            sendResponse({res: "OK"});
        } else if (request.command == "getEventStatus") {
            getEventStatus(request.eventId);
            
            sendResponse({res: eventStatus});
        }
});




function indexedDBOk() {
    return "indexedDB" in window;
}
 
document.addEventListener("DOMContentLoaded", function() {

    if(!indexedDBOk) return;
 
    var openRequest = indexedDB.open(baseName,1);
 
    openRequest.onupgradeneeded = function(e) {
        var thisDB = e.target.result;
 
        if(!thisDB.objectStoreNames.contains(eventStore)) {
            thisDB.createObjectStore(eventStore, { keyPath: "eventId" });
        }
        if(!thisDB.objectStoreNames.contains(ticketStore)) {
            thisDB.createObjectStore(ticketStore, { keyPath: "ticketId" });
        }
    }
 
    openRequest.onsuccess = function(e) {
        console.log("running onsuccess");
 
        db = e.target.result;

    }
 
    openRequest.onerror = function(e) {
        console.log('ERROR');
    }
 
},false);
 

function getEventStatus(eventId, e) {
    if(eventId === "" || isNaN(eventId)) return;
 
    var transaction = db.transaction([eventStore],"readonly");
    var store = transaction.objectStore(eventStore);
 
    var request = store.get(Number(eventId));

    request.onsuccess = function(e) {
        eventStatus = e.target.result.eventStatus;
        console.log(eventStatus);
    }  
}


Суть вопроса - как получить переменную eventStatus из функции getEventStatus для использования ее в отправке колбека sendResponse({res: eventStatus});
Сильно не пинайте, в асинхронных делах совсем запутался (
console.log(eventStatus); - выводит то что нужно, но вот дальше... не пойму как ее туда отправить
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@StockholmSyndrome
function getEventStatus(eventId, cb) {
  // ...
  request.onsuccess = function(e) {
    eventStatus = e.target.result.eventStatus;
    cb(eventStatus);
  }
}

getEventStatus(request.eventId, (eventStatus) => {
  sendResponse({res: eventStatus});
});

или
function getEventStatus(eventId, e) {
  return new Promise((resolve) => {
    // ...
    request.onsuccess = function(e) {
      eventStatus = e.target.result.eventStatus;
      resolve(eventStatus);
    }
  });
}

getEventStatus(request.eventId).then((eventStatus) => {
  sendResponse({res: eventStatus});
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы