aboutsummaryrefslogtreecommitdiff
path: root/src/client/DocServer.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-05-18 02:32:08 -0400
committerTyler Schicke <tyler_schicke@brown.edu>2019-05-18 02:32:08 -0400
commita3fab7b55372dd031a19af0ae583cf6f100c0854 (patch)
tree7c65c2247cb900806453d6c885ca4ad0b9690149 /src/client/DocServer.ts
parent764755f0b025eb3be234d53090ed1fce9a0e1300 (diff)
Added immediate fetching of prototypes
Diffstat (limited to 'src/client/DocServer.ts')
-rw-r--r--src/client/DocServer.ts13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/client/DocServer.ts b/src/client/DocServer.ts
index a288d394a..e2f9b3601 100644
--- a/src/client/DocServer.ts
+++ b/src/client/DocServer.ts
@@ -21,12 +21,10 @@ export namespace DocServer {
export async function GetRefField(id: string): Promise<Opt<RefField>> {
let cached = _cache[id];
if (cached === undefined) {
- const prom = Utils.EmitCallback(_socket, MessageStore.GetRefField, id).then(fieldJson => {
+ const prom = Utils.EmitCallback(_socket, MessageStore.GetRefField, id).then(async fieldJson => {
const field = SerializationHelper.Deserialize(fieldJson);
- if (_cache[id] !== undefined && !(_cache[id] instanceof Promise)) {
- id;
- }
if (field !== undefined) {
+ await field.proto;
_cache[id] = field;
} else {
delete _cache[id];
@@ -65,6 +63,7 @@ export namespace DocServer {
fieldMap[field.id] = SerializationHelper.Deserialize(field);
}
}
+
return fieldMap;
});
requestedIds.forEach(id => _cache[id] = prom.then(fields => fields[id]));
@@ -78,6 +77,12 @@ export namespace DocServer {
}
map[id] = field;
});
+ await Promise.all(requestedIds.map(async id => {
+ const field = fields[id];
+ if (field) {
+ await (field as any).proto;
+ }
+ }));
const otherFields = await Promise.all(promises);
waitingIds.forEach((id, index) => map[id] = otherFields[index]);
return map;