Невозможно использовать ожидание в транзакции обработчика IDBRequest, которая завершится до того, как все необходимые асJquery

Программирование на jquery
Ответить
Anonymous
 Невозможно использовать ожидание в транзакции обработчика IDBRequest, которая завершится до того, как все необходимые ас

Сообщение Anonymous »

Это запросы, которые используют IndexedDB и ожидают:

Код: Выделить всё

openRequest.onsuccess = async () => {
db = openRequest.result
const {transaction, objectStore, cursorRequest} = getIndexedDbTriplet()

cursorRequest.onsuccess = e => {
// @ts-ignore
const cursor = e.target.result

// @ts-ignore
objectStore.count().onsuccess = async e => {
// @ts-ignore
if (e.target.result === 0) {
console.log(`Db doesn't have cart products, trying to fetch from server`)
if (await isAuthenticated()) {
await $.get('/Areas/Cart/GetProducts', products, () => {
if (products.length === 0) {
console.log(`Server also doesn't have cart products`)
return
} else {
$.each(products, (_, product) => {
objectStore.add(product)
})
console.log(`Added products to db`)
}
})
}
} else if (await isAuthenticated()) {
await $.get('Areas/Cart/GetProducts', products, () => {
if (products.length == 0) {
console.log(`Server doesn't have products, uploading to it from db`)
if (cursor) {
$.post('Areas/Cart/AddProduct', cursor.value)
}
cursor.continue()
}
console.log(`Uploaded products to server`)
})
}
transaction.oncomplete = e => console.log(`why`)

objectStore.getAll().onsuccess = e => {
// @ts-ignore
products = e.target.result
let productsLength = products.length

let decrementCount = 0
if (products.length % 4 !== 0) {
while (productsLength % 4 !== 0) {
productsLength--
decrementCount++
}
}

const div = $('')

for (let i = 0; i < productsLength; i += 4) {
const row = getRow()
appendCartProductWidget(products[i], row)
appendCartProductWidget(products[i + 1], row)
appendCartProductWidget(products[i + 2], row)
appendCartProductWidget(products[i + 3], row)
div.append(row)
}

if (products.length % 4 !== 0) {
const row = getRow()
for (let i = 0; i < decrementCount; i++) {
appendCartProductWidget(products[i], row)
}
div.append(row)
}

$('main').append(div)
}
}

}
function getRow(): JQuery {
return $('', {
'class': 'row-cols-4 row',
})
}
}
Я получаю следующую ошибку: Uncaught (в обещании) DOMException: не удалось выполнить «getAll» в «IDBObjectStore»: транзакция завершена.
До того, как я сделал функции асинхронными и ожидал их, ошибок при транзакции не возникало. Мне нужны результаты запросов ajax, чтобы продолжить выполнение. Как это исправить? Как сделать, чтобы транзакция не завершилась.

Подробнее здесь: https://stackoverflow.com/questions/720 ... required-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Jquery»