diff options
| author | Eleanor Eng <eleanor_eng@brown.edu> | 2019-04-08 17:54:30 -0400 |
|---|---|---|
| committer | Eleanor Eng <eleanor_eng@brown.edu> | 2019-04-08 17:54:30 -0400 |
| commit | 1327dc11149fc0ee774f6ee94609a4c48f901ef7 (patch) | |
| tree | 4d1d5d04571fdb1d2408a606740909953c2789c1 /src/server/database.ts | |
| parent | 52b30ce1ba6748c1d0a0f8697df3e66c53b2c315 (diff) | |
| parent | 3a9f6df918ad45e55b0c6a540cb566aff4940288 (diff) | |
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web into animationtimeline
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 a42d29aac..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; + } } } |
