Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit ddcb9ed

Browse files
committed
fix(launcher): task promises run parallel
1 parent 23e4b30 commit ddcb9ed

File tree

1 file changed

+23
-25
lines changed

1 file changed

+23
-25
lines changed

lib/launcher.ts

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -216,38 +216,36 @@ let initFn = async function(configFile: string, additionalConfig: Config) {
216216
}
217217

218218
const createNextTaskRunner = async () => {
219-
return new Promise(async (resolve) => {
220-
const task = scheduler.nextTask();
221-
if (task) {
222-
const taskRunner = new TaskRunner(configFile, additionalConfig, task, forkProcess);
223-
try {
224-
const result = await taskRunner.run();
225-
if (result.exitCode && !result.failedCount) {
226-
logger.error('Runner process exited unexpectedly with error code: ' + result.exitCode);
227-
}
228-
taskResults_.add(result);
229-
task.done();
230-
await createNextTaskRunner();
231-
// If all tasks are finished
232-
if (scheduler.numTasksOutstanding() === 0) {
233-
resolve();
234-
}
235-
logger.info(scheduler.countActiveTasks() + ' instance(s) of WebDriver still running');
236-
} catch (err) {
237-
const errorCode = ErrorHandler.parseError(err);
238-
logger.error('Error:', (err as any).stack || err.message || err);
239-
await cleanUpAndExit(errorCode ? errorCode : RUNNERS_FAILED_EXIT_CODE);
219+
const task = scheduler.nextTask();
220+
if (task) {
221+
const taskRunner = new TaskRunner(configFile, additionalConfig, task, forkProcess);
222+
try {
223+
const result = await taskRunner.run();
224+
if (result.exitCode && !result.failedCount) {
225+
logger.error('Runner process exited unexpectedly with error code: ' + result.exitCode);
240226
}
241-
} else {
242-
resolve();
227+
taskResults_.add(result);
228+
task.done();
229+
await createNextTaskRunner();
230+
// If all tasks are finished
231+
if (scheduler.numTasksOutstanding() === 0) {
232+
return;
233+
}
234+
logger.info(scheduler.countActiveTasks() + ' instance(s) of WebDriver still running');
235+
} catch (err) {
236+
const errorCode = ErrorHandler.parseError(err);
237+
logger.error('Error:', (err as any).stack || err.message || err);
238+
await cleanUpAndExit(errorCode ? errorCode : RUNNERS_FAILED_EXIT_CODE);
243239
}
244-
});
240+
}
245241
};
246242

247243
const maxConcurrentTasks = scheduler.maxConcurrentTasks();
244+
const tasks = [];
248245
for (let i = 0; i < maxConcurrentTasks; ++i) {
249-
await createNextTaskRunner();
246+
tasks.push(createNextTaskRunner());
250247
}
248+
await Promise.all(tasks);
251249
logger.info('Running ' + scheduler.countActiveTasks() + ' instances of WebDriver');
252250

253251
// By now all runners have completed.

0 commit comments

Comments
 (0)