Reputation:
Sorry, I need a translator to use English. Please show the code in the answer. Thank you.
// [message]: Type 'Promise<unknown>' is missing the following properties from type 'IDBDatabase': name, objectStoreNames, onabort, onclose, and 10 more.ts(2740)
const /*[message] here("IDB") -->*/ IDB: IDBDatabase | null = (async () => {
return (await new Promise((resolve, reject) => {
const request = indexedDB.open("idb")
request.onerror = (event) => {
resolve(null)
}
request.onupgradeneeded = (event) => {
resolve(null)
}
request.onsuccess = (event) => {
resolve(request.result as IDBDatabase)
}
request.onblocked = () => {
resolve(null)
}
}))
})()
Upvotes: 1
Views: 1385
Reputation: 26016
You are using async functions incorrectly.
Your async function returns a Promise<IDBDatabase | null>
, so you cannot assign it to IDBDatabase | null
You have 2 options to execute code when the promise resolves
then
on promise to provide a callbackfunction getDBPromise(): Promise<IDBDatabase|null> {
return new Promise((resolve, reject) => {
const request = indexedDB.open("idb")
request.onerror = (event) => {
resolve(null)
}
request.onupgradeneeded = (event) => {
resolve(null)
}
request.onsuccess = (event) => {
resolve(request.result as IDBDatabase)
}
request.onblocked = () => {
resolve(null)
}
})
}
async function awaitInAsyncFunction() {
const IDB: IDBDatabase | null = await getDBPromise();
}
getDBPromise().then((db) => {
const IDB: IDBDatabase | null = db;
})
Upvotes: 1