IDB: openCursor () не является функцией - PullRequest
0 голосов
/ 12 мая 2019

Ну, может я что-то не так делаю ... Но эта ошибка очень запутанная. Я придерживаюсь: «Uncaught TypeError: requestChatHistory.openCursor не является функцией в IDBOpenDBRequest.dbPromise.onsuccess»

IDBOpenRequest может наследовать методы от IDBRequest ...

Я пытался сделать запрос без openCursor () и получить из него первое значение. Также пытался пересоздать базу данных, использовать разные браузеры (Chrome, Edge, Firefox)

Обновление обещания:

dbPromise.onupgradeneeded = function(event) { 
        let db = event.target.result;
        db.createObjectStore('keys', {keyPath: 'userId'});
        let chatHistory = db.createObjectStore('messages', { keyPath: "id", autoIncrement:true });
        chatHistory.createIndex("chatId", "chatId", { unique: false });
    };

Есть моя функция с запросом:

async function loadSavedMessages(chatId){
        let dbPromise = idb.open('clientDB', 3);
        dbPromise.onsuccess = function() {
            let db = this.result;
            let dbTransaction = db.transaction(["messages"]);
            let messages = dbTransaction.objectStore("messages");
            let index = messages.index('chatId'); 
            let requestChatHistory = index.get(chatId);
            requestChatHistory.openCursor().onsuccess = function(event) {
                let cursor = event.target.result;
                if (cursor) {
                    console.log(cursor);
                    cursor.continue();
                }
            };
        }
    }

Функция сохранения данных:

async function saveMessage(chatId, message, userId){
        let dbPromise = idb.open('clientDB', 3);
        dbPromise.onsuccess = function() {
            let db = this.result;
            let dbTransaction = db.transaction(["messages"], 'readwrite');
            let messages = dbTransaction.objectStore("messages");
            let mesObj = {
                chatId: chatId,
                user: userId,
                message: message,
                timestamp: Date.now()
            };
            let save = messages.add(mesObj);
            save.onerror = function(event) {
                // Handle errors!
                console.log("Something went wrong with local DB :(")
            };
            save.onsuccess = function(event) {
                // Do something with the request.result!
                console.log(`Message saved, id ${save.result}`);
            };
        }
    }

1 Ответ

1 голос
/ 12 мая 2019

Это ваша проблема:

            let requestChatHistory = index.get(chatId);
            requestChatHistory.openCursor().onsuccess = function(event) {

requestChatHistory - это IDBRequest, в котором нет метода openCursor. openCursor включено IDBIndex, как и ваша переменная index. Так что, возможно, вы хотели сделать что-то вроде:

            index.openCursor(chatId).onsuccess = function(event) {
...