Код: Выделить всё
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',
})
}
}
До того, как я сделал функции асинхронными и ожидал их, ошибок при транзакции не возникало. Мне нужны результаты запросов ajax, чтобы продолжить выполнение. Как это исправить? Как сделать, чтобы транзакция не завершилась.
Подробнее здесь: https://stackoverflow.com/questions/720 ... required-a