Не могу прочитать данные из IndexedDB

Тема в разделе "JavaScript", создана пользователем amon--ra, 18 мар 2020.

  1. amon--ra

    amon--ra

    Регистрация:
    18 мар 2020
    Сообщения:
    0
    Симпатии:
    0
    Здравствуйте.
    Есть такой код:
    Код:
    function getRec(Rec, f) {
        connectDB(function (db) {
            var request = db.transaction([storeName], "readonly").objectStore(storeName).get(id = 0);
            request.onerror = logerr;
            request.onsuccess = function () {
                Rec = request.result;
                console.log(Rec);
                f(request.result ? request.result : -1);
            }
        });
    }
    
    Вывод в консоль самого Rec я вижу в хроме.
    Но, например, Rec.width консоль выдает undefined.

    Записать объект Rec {width : 1000, .....} мне удалось, а вот прочитать записанное из другого файла js не могу.

    Я только пытаюсь освоить js.
    Помогите, может кто-то рабочий код подкинет?
    Дальше я сам попробую разобраться.
    Заранее благодарен.
     
    Lasted edited by : 18 мар 2020
  2. nighton777

    nighton777

    Регистрация:
    20 апр 2021
    Сообщения:
    2
    Симпатии:
    0
    попробуйте так:
    function getRec(Rec, f) {
    connectDB(function (db) {
    var request = db.transaction([storeName]).objectStore(storeName).get(id = 0);
    request.onerror = logerr;
    request.onsuccess = function () {
    Rec = request.result;
    console.log(Rec);
    f(request.result ? request.result : -1);
    }
    });
    }
     
  3. SinTaksiS-11

    SinTaksiS-11

    Регистрация:
    10 апр 2023
    Сообщения:
    12
    Симпатии:
    1
    В вашей функции getRec() вы используете аргумент Rec, который, как я понимаю, должен быть объектом, в который будет записан результат запроса к базе данных. Однако, присваивание значения Rec = request.result не изменит значение объекта, на который ссылается переменная Rec в вызывающем коде. Для того чтобы изменить значение объекта, вам нужно изменить его свойства напрямую.

    Например, если вы хотите установить значение свойства width объекта Rec, вы можете сделать это следующим образом:

    Код:
    function getRec(Rec, f) {
       connectDB(function (db) {
           var request = db.transaction([storeName], "readonly").objectStore(storeName).get(id = 0);
           request.onerror = logerr;
           request.onsuccess = function () {
               var result = request.result;
               console.log(result);
               if (result) {
                   Rec.width = result.width; // устанавливаем значение свойства width объекта Rec
               }
               f(result ? result : -1);
           }
       });
    }
    
    Здесь мы создаем новую переменную result, чтобы не изменять значение request.result напрямую. Затем мы проверяем, что result не равен null или undefined, и если это так, то устанавливаем значение свойства width объекта Rec равным значению свойства width объекта result. Затем мы вызываем функцию f() с результатом запроса в качестве аргумента.

    После вызова функции getRec() вы можете обратиться к свойству width объекта Rec и увидеть его значение:
    Код:
    var Rec = { width: 0 }; // создаем объект Rec с начальным значением свойства width
    getRec(Rec, function(result) {
       console.log(Rec.width); // будет выведено значение свойства width объекта Rec, полученное из базы данных
    });
    
    Надеюсь, это поможет вам решить проблему.