如何在laravel Bus::batch的then函数和catch函数中传递参数

qrjkbowd  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(156)

当在then函数中传递id时,它的值为null,但我想要内部的then和catch函数,这样我就可以将响应值更新到mongo DB,或者如果有可能在then函数中找到未获取的批处理的id

$batch = Bus::batch($jobs)
            ->then(function (Batch $batch , $id) {
                $data = [
                    'batchResponse' => [
                        'status' => 'success',
                        'created_at' => Carbon::now()->toDateTimeString(),
                        'data' => [
                            'message' => 'Queue processed successfully.',
                            'batch' => $batch,
                        ]
                    ],
                ];

                logging($data);
                loggingMongodb($data, $id);
            })->catch(function (Batch $batch, Throwable $e , $id) {
                $data = [
                    'batchResponse' => [
                        'status' => 'failure',
                        'created_at' => Carbon::now()->toDateTimeString(),
                        'data' => [
                            'message' => 'Queue filed to process.',
                            'batch' => $batch,
                            'exception' => $e->getMessage(),
                        ]
                    ],
                ];

                logging($data);
                loggingMongodb($data, $id);
            })->name('Mail Batch Process')->dispatch();
pinkon5k

pinkon5k1#

不可能直接将变量传递给Laravel批处理进程的then和catch闭包,因为它们在所有作业完成时异步执行。批处理对象本身在这些闭包中可用,但外部作用域的其他变量不能直接访问。
作为一种替代解决方案,您可以在分派批处理时将必要的ID存储在批处理名称中。稍后,您可以从thencatch闭包中的批处理名称中检索ID。这允许您异步处理闭包。

相关问题