我正在尝试类似的东西:
queue.add('queue', {
someId: '123',
service: this.service, // a service injected into the class where queue.add is present
}, { // other opts });
我得到错误:
(node:94191) UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at Job.toData (<project>/node_modules/bull/lib/job.js:192:20)
at addJob (<project>/node_modules/bull/lib/job.js:80:23)
at queue.isReady.then (<project>/node_modules/bull/lib/job.js:94:14)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:94191) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
我相信来自 https://github.com/OptimalBits/bull/blob/develop/lib/job.js#L190-L200。
似乎默认是尝试对整个作业对象进行字符串化,包括数据字段。因此,它抱怨提供的数据字段无法完全字符串化。有没有办法解决这个问题?是否无法将作业添加到具有不可字符串化的自定义数据字段的队列中?
我将service
对象实例注入作业的原因是因为我在nestjs中使用了一个单独的进程并且没有可用的依赖注入。我需要访问该服务才能从进程中执行某些数据库操作。我不想在每次进程运行时都创建单独的数据库连接。
任何帮助将不胜感激,谢谢。
编辑:我认为我的假设是不正确的。Redis 本身不能存储非字符串化的值。