Есть некий запрос к IndexedDB
function GetData(storename,index,callback)
{
var openReq = indexedDB.open("catalogs");
openReq.onsuccess = function()
{
var db = openReq.result;
var transaction = db.transaction([storename], "readwrite");
var objectStore = transaction.objectStore(storename);
var objectStoreRequest = objectStore.get(index);
var store=null;
objectStoreRequest.onsuccess =function(event)
{
store =objectStoreRequest.result;
return store;
}
transaction.oncomplete = function(event)
{
db.close();
if(callback)
callback(store);
}
}
}
Я хочу записать значение в какуюто переменную вот так:
var result;
GetData('pesticides',i,function(res){result=res; });
console.log(result);
Но значение result вне области видимости и в консоль возвращается undefined.
Ужасное форматирование кода, никакого codestyle это раз. Во вторых нет проверки что typeof callback === 'function' это два. Используйте промисы и promises api. Придется переписать код функции под промисы.
function GetData (storename, index) {
return new Promise(function (resolve, reject) {
var openReq = indexedDB.open("catalogs")
openReq.onsuccess = function () {
var db = openReq.result
var transaction = db.transaction([storename], "readwrite")
var objectStore = transaction.objectStore (storename)
var objectStoreRequest = objectStore.get (index)
var store = null
objectStoreRequest.onsuccess = function (event) {
store = objectStoreRequest.result
resolve(store)
}
transaction.oncomplete = function (event) {
db.close()
resolve(store)
}
}
}
}
Потом в коде где надо получить результат пишите
GetData('sss', 2).then(function (data) {
//в data лежит результат resolve(store)
}, function () {
//Обработка ошибки
})
Не забывайте что код асинхронный
п.с. в коде возможно ошибки есть, кажется не закрыл скобку
п.с.с Я не знаю как работает ваш код, но мне кажется там очень много лишних переменных
Так не получится.
Чтобы работало или метод должен быть синхронным (плохо, плохо, плохо!) или result должен быть глобальным, относительно callback'а, а еще лучше перенести по возможности обработку в колбэк.
var result;
function processResult(resultData) {
// ..
}
GetData('pesticides', i, processResult);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости