diff options
author | ab <abdullah_ahmed@brown.edu> | 2019-04-07 10:34:27 -0400 |
---|---|---|
committer | ab <abdullah_ahmed@brown.edu> | 2019-04-07 10:34:27 -0400 |
commit | 2c248fdf429d70424e398ff2b718c89f802025e9 (patch) | |
tree | ae0737b78b75dffc30002e4048abd32fe038eb78 /src/server/database.ts | |
parent | 49310acbdfd7ca239c939208b3766c54e980f6f1 (diff) | |
parent | b680f3db2f9fb6dc65f47848234e96453ef60a5c (diff) |
ab committed this
Diffstat (limited to 'src/server/database.ts')
-rw-r--r-- | src/server/database.ts | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/src/server/database.ts b/src/server/database.ts index 374cedcbb..415acc09a 100644 --- a/src/server/database.ts +++ b/src/server/database.ts @@ -1,8 +1,4 @@ -import { action, configure } from 'mobx'; import * as mongodb from 'mongodb'; -import { ObjectID } from 'mongodb'; -import { Transferable } from './Message'; -import { Utils } from '../Utils'; export class Database { public static Instance = new Database() @@ -16,21 +12,39 @@ export class Database { }) } + private currentWrites: { [_id: string]: Promise<void> } = {}; + public update(id: string, value: any, callback: () => void) { if (this.db) { let collection = this.db.collection('documents'); - collection.updateOne({ _id: id }, { $set: value }, { - upsert: true - }, (err, res) => { - if (err) { - console.log(err.message); - console.log(err.errmsg); - } - // if (res) { - // console.log(JSON.stringify(res.result)); - // } - callback() - }); + const prom = this.currentWrites[id]; + const run = (promise: Promise<void>, resolve?: () => void) => { + collection.updateOne({ _id: id }, { $set: value }, { + upsert: true + }, (err, res) => { + if (err) { + console.log(err.message); + console.log(err.errmsg); + } + // if (res) { + // console.log(JSON.stringify(res.result)); + // } + if (this.currentWrites[id] === promise) { + delete this.currentWrites[id] + } + if (resolve) { + resolve(); + } + callback(); + }); + } + if (prom) { + const newProm: Promise<void> = prom.then(() => run(newProm)); + this.currentWrites[id] = newProm; + } else { + const newProm: Promise<void> = new Promise<void>(res => run(newProm, res)) + this.currentWrites[id] = newProm; + } } } |