Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407

IindexedDB Использование get по индексируемому полю

22.12.2025, 23:05. Показов 924. Ответов 26
Метки нет (Все метки)

Будьте добры, вроде бы метод get можно использовать для поиска по индексу, потратил много времени, но так и не смог понять, почему функция fi_kl() не находит объект с заданным названием или годом при использовании соответствующего индексного файла.

HTML5
1
2
3
4
5
6
7
 <button onclick = 'idb_ti_all ("Ffilm");' class="kn1" > →ti (ALL) </button> для проверки
 <button onclick = "imp_mFilm ();" class="kn1" > массив→ хр.  </button>
 <button onclick = "fi_kl ();" class="kn1" > fi_kl </button> 
 <span id="inf1" class= "abs" style="color: darkblue;"> inf1    </span>
 <div class="obl_tst">
   <span id="inf2" style=""> </span>
 </div>

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
 const idb_nam_db= ["tst", 1];
 let idb_nam_xr= "Ffilm";
 let idb_db;
 
 promise = idb_open();
 promise.then (st => { idb_db= st; })   
 
function idb_open ()  {
return new Promise(function(resolve, reject) {
 
 console.log (` GET idb_open() => DB ${idb_nam_db[0]}, ${idb_nam_db[1]}`);
 
 const req = indexedDB.open(idb_nam_db[0], idb_nam_db[1]); 
 req.onupgradeneeded = function() {
    let db = req.result;
    ins_xr_1 (db);
 };
    req.onsuccess = () => {
        console.log(`database ${idb_nam_db[0]} Версия: ${idb_nam_db[1]} open`);
        idb_db = req.result;
        resolve(req.result)
    };
    req.onerror = function () {
        console.log(`database ${idb_nam_db[0]} Версия: ${idb_nam_db[1]} onerror !!!`);         
    }
})
 
 function ins_xr_1 (db) {
  let nm_xr= "Ffilm";
  if (!db.objectStoreNames.contains(nm_xr)) {   // если хранилище "" не существует
    let xr= db.createObjectStore(nm_xr, {keyPath: ['nam_film','god_film']});
    let ind;
    ind = xr.createIndex('ind_god', ['god_film'], { unique: false })
    ind = xr.createIndex('ind_nam', ['nam_film'], { unique: false })
        console.log  ("Хранилище <b>"+ nm_xr+ "</b> создано !!!")
  }
  else
      inf2.innerHTML =  "Хранилище <b>"+ nm_xr+ "</b> found !!!"; 
 }
 
}
 
// ===================
function idb_ti_all (nm_xr) {
 
 let tr = idb_db.transaction(nm_xr);
 let xr = tr.objectStore(nm_xr);
 
 index_fil= 'ind_nam';
   // index_fil= 'ind_god';
 
 let index = xr.index(index_fil); 
 let req = index.openCursor();
 
 let rec = document.querySelector("#inf2");
 let st= `index= ${index_fil}
        <table><tr> <th>key</th> <th></th>  
        <th>nam</th> <th>god</th>
            </tr>`;
 
 req.onsuccess = function() {
    let cursor = req.result;
    if (cursor) {
        var key = cursor.key; // ключ книги (поле id)  ${key}
        let val = cursor.value; // объект книги
        st+= frm_st(val, cursor)
        cursor.continue();
    } else {
        st+= `</table>`;
        rec.innerHTML= st;
    }
 };
 
 function frm_st (val, cursor) {
 let key = cursor.key;
 let st;
 st= ` <tr>
    <td >${key} </td>
    <td ></td>
    <td class="td_akt">${val.nam_film} </td>
    <td >${val.god_film} </td> 
  </tr>
 `;
    return st
 }
 
}
 
 
// =================================
function imp_mFilm ()   {       // , zn_pol, kl
return new Promise((resolve, reject) => {
 
 let nm_xr= "Ffilm";
 const m_in = [
["Васаби", 1974],
 ["Аванти", 1972],
 ["Аватар", 2009],
["Блеф", 1974],
["Долг", 1974],
["Безумие", 1969],
 ];
 let ob_in= {};
 
 let tr = idb_db.transaction(nm_xr, 'readwrite');
 let xr = tr.objectStore(nm_xr);
 let req;
 
 for (let i= 0; i< m_in.length; i++) {
    ob_in.nam_film= m_in [i][0]; ob_in.god_film= m_in [i][1];
    console.log("imp_mFilm │ Сформ: ", ob_in, `kl= ${ob_in.nam_film}  ${ob_in.god_film}`);
    req = xr.add(ob_in);
 }
    req.onsuccess = function() {
        console.log(" => │ add nam_film="+ ob_in.nam_film, req.result);
        resolve("1");
    };
    req.onerror = function() {
        console.log("Ошибка", req.error);
        reject(0);
    }
 
});
}
 
 
// ==============================
 
 function fi_kl ()  {
 
 let nm_xr= 'Ffilm';
 const tr = idb_db.transaction(nm_xr, 'readonly');
 const xr = tr.objectStore(nm_xr);
 
  //let index = xr.index('ind_nam'); kl= "Блеф";
  index = xr.index('ind_god');
   kl= 1972;
 
 let query = index.get(kl);
    query.onsuccess = (event) =>{
       if (!query.result) {
            inf2.innerHTML = " kl = "+ kl+ " NOT FOUND !!!";
            console.log(`fi_ocen │ NOT FOUND in ${nm_xr} kl= ${kl} `);   
        } else {
            val= query.result
            console.log(`fi_ocen │ res= ${query.result} film= │ ${val.nam_film}`); 
            inf2.innerHTML = " ='"+ event.target.result+ "' for kl= "+ kl;
       }
    };
    query.onerror = (event) =>{
        inf2.innerHTML = "onerror │ "+ event.target.errorCode;
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2025, 23:05
Ответы с готовыми решениями:

Как правильно должен работать скрипт с использованием get.Seconds и get.Months одновременно?
Подскажите, пожалуйста, как правильно должен работать скрипт с использованием get.Seconds и...

Метод get не срабатывет (Cannot GET /api/auth/generate)
Работаю с с js не так давно. Нужно сделать 3rd party service - запрос на сторонний сервис. Он...

Реализуйте классы Magician и Daemon с get/set stoned. При этом get/set attack должен учитывать логику
Здравствуйте! Подскажите, пожалуйста, как можно скорректировать решение Есть задача: Мое...

26
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
25.12.2025, 19:45  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Это было не предположение, а утверждение
Утверждение иногда может быть ошибочным (это не аксиома).
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3857 / 1740 / 432
Регистрация: 14.03.2022
Сообщений: 4,434
25.12.2025, 19:48
Цитата Сообщение от 755 Посмотреть сообщение
можно ли реализовать ожидание (типа await) с использованием асинхронности.
Напомню что await можно использовать только внутри самой async-функции...
Но как только ты ее вызовешь - управление сразу перейдет на следующую синхронную операцию.

Т.е. с обещаниями нужно уметь работать и правильно их использовать.

Добавлено через 37 секунд
Цитата Сообщение от 755 Посмотреть сообщение
Утверждение иногда может быть ошибочным (это не аксиома).
Не в твоем случае...
1
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
25.12.2025, 19:48  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Оставь надежду всяк сюда входящий... (с)
Ну что ж, на нет так и суда нет
0
 Аватар для voraa
1296 / 1280 / 190
Регистрация: 21.01.2024
Сообщений: 5,930
25.12.2025, 20:57
Цитата Сообщение от 755 Посмотреть сообщение
И на весь режим только один файл html.
Ну вообще то одна страница всегда состоит только из одного файла html. Другие не подключить.

Цитата Сообщение от 755 Посмотреть сообщение
для которой через параметры задается блокировка экрана (при необходимости), срабатывание по Esc,
А фокус всегда только в окне? По Tab/Shift+Tab не уходит?
Цитата Сообщение от 755 Посмотреть сообщение
но и остановку выполнения кода (МО типа alert)
Javascript изнутри не остановить. Даже await. При каком либо событии, сразу начинается его обработка.
Цитата Сообщение от 755 Посмотреть сообщение
можно ли реализовать ожидание (типа await) с использованием асинхронности.
Нет. Вы так и не понимаете, что такое асинхронность.
Асинхронность это не ожидание. Это работа с перерывом на запланированные дела.
JavaScript работает в одном потоке, который не остановить.
Вот я работаю. Я один поток. Я не могу одновременно делать разные дела, и ждать не могу - работать надо. Могу только не надолго отрываться от основной работы.
Я захотел выпить кофе, запустил кофеварку (js загружает картинку, что бы ее обработать), сижу работаю.
Кофеварка запищала - кофе готов (разрешился промис загрузки картинки).
Дописав пару строк программы, т.к. нельзя бросать незаконченное иду пить кофе (Код js тоже не сразу на промис реагирует. Сначала завершает свой таск, а потом в микротаске обрабатывает промис - то, что в then)
А да, я еще себе на телефоне установил будильник на 14:30, что бы не пропустить время и позвонить по делу. (Сработал установленный timeout в js - обрабатывается функция, заданная в таймере). Дописав пару строк (js тоже не сразу, а в следующем таске) звоню.
Закончив разговор работаю дальше.
Звонок очередного мошенника. (Кто то мышью кликнул) прерываюсь - отвечаю матом на внешнее событие.

Я ничего не жду. Я просто прерываюсь, когда происходит какое то событие. Даже если у меня нет работы в данный момент, я не засыпаю мертвым сном. Дышу, сердце бьется (работает цикл событий в js. как только событие появляется оно поступает на обработку - таск. Если во время обработки события поступает следующее, таск не пррывается, а событие ставится в очередь) - готов реагировать на происходящее вокруг.
1
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
25.12.2025, 21:43  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Ну вообще то одна страница всегда состоит только из одного файла html. Другие не подключить.
Понимаю. Но речь идет, например выводится список категорий товаров. Для каждой категории (по крайней мере 1-2-го уровня, например бытовая техника) можно было бы сформировать свои html файл. Но все дальнейшие переходы и вывод - на подкатегории, карточки товаров реализованы через js (основное соображение было - не придется передавать переменные между файлами - идут как глобальные)

Цитата Сообщение от voraa Посмотреть сообщение
А фокус всегда только в окне? По Tab/Shift+Tab не уходит?
Да, естественно - для каждого уровня МО устанавливается свой
JavaScript
1
document.addEventListener('keydown', window [m_mo [i_ur_mo][4]]);
,
а уже функционально не разрешенные клавиши игнорируются
Цитата Сообщение от voraa Посмотреть сообщение
Javascript изнутри не остановить. Даже await. При каком либо событии, сразу начинается его обработка.
Спасибо, понятно. Это же написал чуть ранее и krvsa.
.

Добавлено через 24 минуты
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
async function fi () {
    const res = await fi_iDB(id_get);
    console.log (` (1) │ res= ${res}`)
}
function fi_iDB (id)    {
return new Promise (function(resolve, reject) {
 
 let nm_xr= 'film';
 const xr = idb_db.transaction(nm_xr, 'readonly').objectStore(nm_xr);
 let index = xr.index('ind_ocJanr');
 let query = index.get(IDBKeyRange.bound([id,1], [id,10]));
 query.onsuccess = (event) =>{
    if (!event.target.result) {
        console.log(`fi_ocen │ NOT FOUND in ${nm_xr} nam_film= ${nam_film} `);
    }
    else {
        val= event.target.result
        console.log(`fi_ocen │ res= ${event.target.result} film= │ ${val.nam_film}`);
        resolve (1);
    }
 };
});
}
 
fi ();
Наверное, неверно понимаю терминологию?
console.log (` (1) │ res= ${res} не запустится пока не выполнится fi_iDB(id_get) и не сформируется результат промиса

Хотя с другой стороны, цитата (мне кажется неплохая):
Ключевое слово await заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от await не выполнится. После чего оно вернёт его результат, и выполнение кода продолжится.
Быстрей всего отсюда и говорю, следующий код после промиса при await ждет окончания его выполнения

И безусловно можно было бы Вам, voraa, ничего этого не приводить - Вы все прекрасно знаете - скорее это для своего понимания, потому что действительно, хоть и написали, что вопрос не сложный, некоторые тонкости асинхронности еще не осознал.
0
 Аватар для voraa
1296 / 1280 / 190
Регистрация: 21.01.2024
Сообщений: 5,930
25.12.2025, 22:32
Цитата Сообщение от 755 Посмотреть сообщение
Ключевое слово await заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от await не выполнится. После чего оно вернёт его результат, и выполнение кода продолжится.
Это откуда такая глупость?
Цитата Сообщение от 755 Посмотреть сообщение
console.log (` (1) │ res= ${res} не запустится пока не выполнится fi_iDB(id_get) и не сформируется результат промиса
А вы поставьте console.log после fi и посмотрите, что будет
Вот так

JavaScript
1
2
fi ();
console.log ('После fi')
В каком порядке они выведутся и подумайте почему
0
-62 / 2 / 0
Регистрация: 12.11.2020
Сообщений: 407
26.12.2025, 10:23  [ТС]
По порядку.
Цитата Сообщение от voraa Посмотреть сообщение
Сообщение от 755
Ключевое слово await заставит интерпретатор JavaScript ждать до тех пор, пока промис справа от await не выполнится. После чего оно вернёт его результат, и выполнение кода продолжится.

Это откуда такая глупость?
Думал здесь:https://thecode.media/async-aw... ript/#id-6
Но оказалось, что здесь:https://learn.javascript.ru/async-await#itogo
На который любит ссылаться krvsa (здесь можно было бы разместить значок улыбки, но терпеть не могу всякие значки).
Хотя и в первом источнике также упоминается ожидание. Но прочитал внимательнее:
"Всё работает благодаря Event Loop: пока await ждёт, движок освобождает стек вызовов, обрабатывает другие задачи, а когда результат готов — возвращается" - видимо это Вы и имели в виду.

Добавил, как предложили:
JavaScript
1
2
fi ();
console.log ('После fi')
Да, похоже я быстрей всего не допонимал - останавливается код внутри async function (), а тот, что снаружи продолжал выполняться - все зависит от контекста сказанного.

Спасибо за потраченное время
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2025, 10:23

Динамическое клонирование полей формы и их дальнейшее использование
Здравствуйте. Есть необходимость динамического склонирования элементов формы. Есть форма. есть три...

Как получить массив из значений при использовании цикла?
привет всем, в програмировании новичёк, помогите получить массив, имеется вот такая прога, мне...

Возможно ли получить от сервера простой ответ без использования data.store?
В общем, нужна просто проверка на существование поля с данными. Т.е. нужно что: Есть таблица с...

document.getElementById нужно получить не значение value а сам текст. При использовании с select
Всем приветик! Ребят, подскажите пожалуйста как решить эту задачку, а то я с JavaScript очень плохо...

не удается получить доступ к this при использование setInterval
есть у меня объект созданый вот таким способом (function () { function myObj() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
[golang] Insert Delete GetRandom O(1) (Leetcode: 380)
alhaos 16.06.2026
Insert Delete GetRandom O(1) Сложность: Medium Источник: LeetCode 380 Задача Реализовать структуру данных RandomizedSet, которая поддерживает следующие операции за O(1) в среднем:
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли. Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
Min Stack Сложность: Medium Источник: LeetCode 155 Задача: Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1). Методы:
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru