fix(client): worker executor task once (#46951)

This commit is contained in:
Hankai Xia
2022-08-09 00:20:15 +08:00
committed by GitHub
parent 6c71cbca24
commit bc369e97d8
2 changed files with 16 additions and 3 deletions

View File

@@ -129,16 +129,17 @@ const eventify = self => {
self.emit = (event, ...args) => {
if (typeof self._events[event] !== 'undefined') {
self._events[event].forEach(listener => {
const listeners = self._events[event].slice();
for (let listener of listeners) {
listener.apply(self, args);
});
}
}
return self;
};
self.once = (event, listener) => {
self.on(event, function handler(...args) {
self.removeListener(handler);
self.removeListener(event, handler);
listener.apply(self, args);
});
return self;

View File

@@ -232,3 +232,15 @@ it('Worker executor should get worker from specified location', async () => {
expect(global.Worker).toBeCalledTimes(1);
expect(global.Worker).toBeCalledWith('/other/location/test.js');
});
it('Task should only emit handler once', () => {
mockWorker();
const testWorker = createWorker('test');
const task = testWorker.execute('test');
const handler = jest.fn();
task.once('testOnce', handler);
task.emit('testOnce', handler);
task.emit('testOnce', handler);
expect(handler).toBeCalledTimes(1);
});