Вам необходимо выполнить несколько запросов. Оператор SQL IN
по сути является синтактическим c сахаром для image_code = a or image_code = b
. Проблема заключается в использовании or
здесь. indexedDb не поддерживает что-то вроде or
. Поэтому вам нужно выполнить запрос для img_bbb111
, за которым следует второй запрос для img_ddd333
, а затем объединить результаты двух запросов.
Примерно так:
function myOnUpgradeNeeded(event) {
const imageStore = db.createObjectStore('images_store', ...);
imageStore.createIndex('image_code_index', 'image_code');
}
function findImagesForCodes(db, codes) {
return new Promise((resolve, reject) => {
const transaction = db.transaction('images_store');
const store = transaction.objectStore('images_store');
const codeIndex = store.index('image_code_index');
const results = [];
transaction.oncomplete = event => resolve(results);
transaction.onerror = event => reject(event.target.error);
for (const code of codes) {
const request = codeIndex.get(code);
request.onsuccess = onRequestSuccess;
}
function onRequestSuccess(event) {
const image = event.target.result;
if(image) {
results.push(image);
}
}
});
}