diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-02-28 00:55:04 -0500 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-02-28 00:55:04 -0500 |
commit | 9c9aea92d9a330f5826735c3c3e07ec35b325cc2 (patch) | |
tree | a673abebad861cbb29d7f5ed218d42778071e33d | |
parent | c6ce284c0938587df5a0fa759587b33f8beaa68f (diff) |
Added GetOrCreateAsync
-rw-r--r-- | src/fields/Document.ts | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 5b91de6ed..0c156b282 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -102,6 +102,25 @@ export class Document extends Field { return false; } + GetOrCreateAsync<T extends Field>(key: Key, ctor: { new(): T }, callback: (field: T) => void): void { + //This currently doesn't deal with prototypes + if (this._proxies.has(key.Id)) { + Server.GetDocumentField(this, key, (field) => { + if (field && field instanceof ctor) { + callback(field); + } else { + let newField = new ctor(); + this.Set(key, newField); + callback(newField); + } + }); + } else { + let newField = new ctor(); + this.Set(key, newField); + callback(newField); + } + } + GetT<T extends Field = Field>(key: Key, ctor: { new(...args: any[]): T }, ignoreProto: boolean = false): FieldValue<T> { var getfield = this.Get(key, ignoreProto); if (getfield != FieldWaiting) { |