It works but there's an uncaught exception?

This commit is contained in:
Eddie Antonio Santos 2018-10-01 15:10:23 -06:00
parent ee93b6c586
commit 8e6203b29a
No known key found for this signature in database
GPG key ID: DD411EA4D9509D87
3 changed files with 69 additions and 6 deletions

View file

@ -1,10 +1,54 @@
const {Worker} = require('webworker-threads');
exports.LMLayer = class LMLayer {
constructor() {
this._worker = new Worker('lmlayer.js');
this._worker.onmessage = this._onmessage.bind(this);
this._promises = new Map();
this._currentToken = 0;
}
/**
*
* Sends a context, transform, and token to the LMLayer.
*/
async predictWithContext({_transform, _context, _token}) {
return [
{ insert: 'Derek', deleteLeft: 1, deleteRight: 0 },
];
predictWithContext({transform, context, _token}) {
let token = this._currentToken++;
let promise = new Promise((resolve, reject) => {
if (this._promises.has(token)) {
reject(`Existing request with token ${token}`);
}
this._worker.postMessage({
kind: 'predict',
token,
transform,
context
});
this._promises.set(token, resolve);
});
return promise;
}
/**
* Handles the wrapped worker's onmessage events.
*/
_onmessage(event) {
const {kind, token} = event.data;
let accept = this._promises.get(token);
if (!accept) {
throw new Error(`No promise associated with token: ${token}`);
}
if (kind === 'suggestions') {
accept(event.data);
this._promises.delete(token);
} else {
throw new Error(`Unknown message kind: ${kind}`);
}
}
};

18
lmlayer.js Normal file
View file

@ -0,0 +1,18 @@
/**
* Prototype LMLayer.
*/
self.onmessage = function (event) {
const {kind, token} = event.data;
if (kind === 'predict') {
postMessage({
kind: 'suggestions',
token,
suggestions: [
{ insert: 'Derek', deleteLeft: 1, deleteRight: 0 },
]
});
} else {
throw new Error('invalid message');
}
};

View file

@ -6,10 +6,11 @@ test('Can provide context to LMLayer', async t => {
t.plan(1);
let suggestions = await lm.predictWithContext({
let message = await lm.predictWithContext({
transform: { insert: 'D', deleteLeft: 0, deleteRight: 0 },
context: { left: '' }
});
let {suggestions} = message;
t.deepEqual(suggestions, [
{ insert: 'Derek', deleteLeft: 1, deleteRight: 0 }