Merge pull request #1 from pioardi/dependabot/npm_and_yarn/expect-25.1.0
[poolifier.git] / lib / fixed.js
index 833ae7b6f1f048c8ff0a92e7eb42a1bdacd36b78..8d899d57bb4ed00a54e4d1a1f2093641d8bd3f77 100644 (file)
@@ -2,9 +2,9 @@
 const {
   Worker, isMainThread, MessageChannel, SHARE_ENV
 } = require('worker_threads')
-const { generateID } = require('./util')
 
 function empty () {}
+const _void = {}
 /**
  * A thread pool with a static number of threads , is possible to execute tasks in sync or async mode as you prefer. <br>
  * This pool will select the worker thread in a round robin fashion. <br>
@@ -26,6 +26,7 @@ class FixedThreadPool {
     this.nextWorker = 0
     this.opts = opts || { maxTasks: 1000 }
     this.filePath = filePath
+    this._id = 0
     // threadId as key and an integer value
     this.tasks = new Map()
     for (let i = 1; i <= numThreads; i++) {
@@ -48,9 +49,9 @@ class FixedThreadPool {
     // configure worker to handle message with the specified task
     const worker = this._chooseWorker()
     this.tasks.set(worker, this.tasks.get(worker) + 1)
-    const id = generateID()
+    const id = ++this._id
     const res = this._execute(worker, id)
-    worker.postMessage({ data: data, _id: id })
+    worker.postMessage({ data: data || _void, _id: id })
     return res
   }
 
@@ -60,7 +61,8 @@ class FixedThreadPool {
         if (message._id === id) {
           worker.port2.removeListener('message', listener)
           this.tasks.set(worker, this.tasks.get(worker) - 1)
-          resolve(message.data)
+          if (message.error) reject(message.error)
+          else resolve(message.data)
         }
       }
       worker.port2.on('message', listener)