Задать вопрос
@igreklpofrss

Почему не работает await?

Вопрос простой, но решить не получается(( Суть такая. Надо добавить данные в БД IndexDB. Используется промис, чтобы ловить события. После первой итерации description_list поток идет на завершение работы. Через devtool отловить проблему не могу, тк console.log() не ловит промис. После await код перестает работать идет на завершение. В целом также писал код для fetch и там работа не завершалась. Т.е. также в async фу-ии вызывается await с фу-ей, в которой возвращается Promise.
globalThis.db = DB // Тут открытая БД IDBDatabase
let description_list = [...] // тут даннные

function run() {
    writeAllDescriptions(description_list);
}

async function writeAllDescriptions(description_list) {
	for (let description of description_list) {
                // в description 5 словарей. Все сохраняются.
		for (let desc of description) {
			let descJSON = JSON.stringify(desc);
                        // Все данные из первой итерации description_list
                        // сохраняются в БД.
                        let t = await writeDesc(descJSON);
                        // Не срабатывает лог, хотя 
                        //все данные из description сохраняются
                        console.log(t)
		}
	}
}

function writeDesc(desc) {
	return new Promise(function(resolve) {
		let transaction = globalThis.db.transaction("english", "readwrite"); 
                let descriptionStore = transaction.objectStore("english");
                let description = descriptionStore.index("desc"); 
                // поиск по индексу
                description.get(desc).onsuccess = function(event) {
        	        let r = event.target.result; 
                        // если такого значения нет, добавить
        	        if (!r) {
        		        descriptionStore.add({"desc":desc}).onsuccess = function() {
        			        resolve(this);
        		}
        	}
        }
	})
}

run();
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
@ikutin
я бы логировал внутри description.get, есть подозрение, что resolve не вызывается
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы