aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-18 04:37:10 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-18 04:37:10 +0100
commiteb9677c374418384f1a96eba95153dc69ebfccc4 (patch)
tree4ecd9d802403099b2f20ce9d779b40cabd4920ad
parent356ebd2137eb5ca31486ed49ab8223c8256b1554 (diff)
sequence logging
-rw-r--r--src/logging.ts49
-rw-r--r--src/query.ts2
2 files changed, 33 insertions, 18 deletions
diff --git a/src/logging.ts b/src/logging.ts
index 3f8757a07..16aa851bc 100644
--- a/src/logging.ts
+++ b/src/logging.ts
@@ -20,7 +20,7 @@
* @author Florian Dold
*/
-import {Store, QueryRoot} from "./query";
+import {Store, QueryRoot, openPromise} from "./query";
export type Level = "error" | "debug" | "info" | "warn";
@@ -126,31 +126,46 @@ export async function getLogs(): Promise<LogEntry[]> {
return await new QueryRoot(db).iter(logsStore).toArray();
}
+let barrier: any;
+
export async function record(level: Level, msg: string, source?: string, line?: number, col?: number): Promise<void> {
if (typeof indexedDB === "undefined") {
return;
}
- if (!db) {
- db = await openLoggingDb();
+
+ let myBarrier: any;
+
+ if (barrier) {
+ let p = barrier.promise;
+ myBarrier = barrier = openPromise();
+ await p;
+ } else {
+ myBarrier = barrier = openPromise();
}
- let count = await new QueryRoot(db).count(logsStore);
+ try {
+ if (!db) {
+ db = await openLoggingDb();
+ }
- console.log("count is", count);
+ let count = await new QueryRoot(db).count(logsStore);
- if (count > 1000) {
- await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200));
- }
+ if (count > 1000) {
+ await new QueryRoot(db).deleteIf(logsStore, (e, i) => (i < 200));
+ }
- let entry: LogEntry = {
- timestamp: new Date().getTime(),
- level,
- msg,
- source,
- line,
- col,
- };
- await new QueryRoot(db).put(logsStore, entry);
+ let entry: LogEntry = {
+ timestamp: new Date().getTime(),
+ level,
+ msg,
+ source,
+ line,
+ col,
+ };
+ await new QueryRoot(db).put(logsStore, entry);
+ } finally {
+ await Promise.resolve().then(() => myBarrier.resolve());
+ }
}
const loggingDbVersion = 1;
diff --git a/src/query.ts b/src/query.ts
index f8a6255b4..2c5a6002f 100644
--- a/src/query.ts
+++ b/src/query.ts
@@ -86,7 +86,7 @@ export let AbortTransaction = Symbol("abort_transaction");
* Get an unresolved promise together with its extracted resolve / reject
* function.
*/
-function openPromise<T>() {
+export function openPromise<T>() {
let resolve: ((value?: T | PromiseLike<T>) => void) | null = null;
let reject: ((reason?: any) => void) | null = null;
const promise = new Promise<T>((res, rej) => {