javascript - Ingenting körs efter await
Jag har stött på ett hinder i min förståelse av JS- löften och händelsehanterare.
Jag har en asynkron funktion tilldelad till FileReader's onload-callback. Koden för det första asynkrona anropet körs utan problem (och om det kastar ett undantag, fångas undantaget). Men koden efter det första await körs aldrig.
Varför körs aldrig koden efter await?
Jag förväntar mig att antingen koden efter await körs så småningom eller att ett undantag kastas och fångas av catch.
Jag försöker förstå anledningen till att fortsättningen aldrig kallas.
Jag skulle också vilja förstå vad som är det bästa sättet för mig att kalla asynkrona funktioner från funktioner som inte kan vara asynkrona. Jag förstår att det kan vara omöjligt att synkront vänta på att de ska slutföras, men jag skulle åtminstone vilja trigga den asynkrona exekveringen av all kod.
const reader = new FileReader();
reader.onabort = () => console.log("file reading was aborted");
reader.onerror = () => console.log("file reading has failed");
reader.onload = async () => {
try {
console.log("Before");
const digestToComponentTextDb = localForage.createInstance({
name: "components",
storeName: "some_store",
});
console.log("Middle");
await digestToComponentTextDb.setItem("key", 'x'.repeat(20000));
console.log('After');
} catch(err) {
console.error(err);
}
};
reader.readAsArrayBuffer(file);
"Before" och "Middle" skrivs ut, men inte "After".
Uppdatering:
Det ser ut som att en IndexedDB-databas blev korrupt i Chrome. Jag kan inte visa den. "some_db" visas utan problem, men "components" visas inte (det väljs inte ens). Så problemet ligger tydligen i hur localForage setItem hanterar skrivningar till trasiga IndexedDB-databaser.
