Во-первых, я попробовал все вопросы и ответы, связанные с этой темой. Кроме того, я пробовал связанные вопросы и пытался решить их, но безуспешно. Поэтому внимательно прочитайте мой вопрос.
Предпочитать ссылки
Поиск, связанный со ссылками
Получение ошибки при добавлении значения в indexedDB с использованием angular2
Я хочу добавить данные в indexeddb
, но почему-то отображается ошибка открытия соединения с базой данных. Я прикрепил скриншот. Поэтому я прошу поставить на ответ один небольшой пример, добавив значение в indexeddb
.
Мой код
app.components.js
import { Component, OnInit } from '@angular/core';
import { NgxIndexedDB } from 'ngx-indexed-db';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
title = 'indexDb-Angular';
ngOnInit() {
let db = new NgxIndexedDB('DVdb', 1);
db.openDatabase(1, evt => {
let objectStore = evt.currentTarget.result.createObjectStore('people', { keyPath: 'id', autoIncrement: true });
objectStore.createIndex('name', 'name', { unique: false });
objectStore.createIndex('email', 'email', { unique: true });
});
db.add('people', { name: 'Sumit', email: '[email protected]' }).then(
() => {
// Do something after the value was added
},
error => {
console.info(error);
}
);
}
}
как использовать асинхронность в ngOnInit()??
Не на ngOnInit()
, но db.openDatabase
сделан асинхронным.
Сделайте openDatabase()
асинхронным методом, чтобы он ждал открытия базы данных, прежде чем добавлять значение. Вы можете сделать это асинхронным, используя .then(function() {
ngOnInit() {
let db = new NgxIndexedDB('DVdb', 1);
db.openDatabase(1, evt => {
let objectStore = evt.currentTarget.result.createObjectStore('people', { keyPath: 'id', autoIncrement: true });
objectStore.createIndex('name', 'name', { unique: false });
objectStore.createIndex('email', 'email', { unique: true });
}).then(function () {
db.add('people', { name: 'Sumit', email: '[email protected]' }).then(
() => {
// Do something after the value was added
},
error => {
console.info(error);
}
);
});
}
да. вы правы. Второй - это необязательный обратный вызов, который при необходимости будет обрабатывать создание объектных хранилищ для этой версии. openDatabase возвращает обещание.
что значит добавленная стоимость?
Вы пытались сделать
db.add(...)
асинхронным послеdb.openDatabase
?