当在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();
1条答案
按热度按时间pinkon5k1#
不可能直接将变量传递给Laravel批处理进程的then和catch闭包,因为它们在所有作业完成时异步执行。批处理对象本身在这些闭包中可用,但外部作用域的其他变量不能直接访问。
作为一种替代解决方案,您可以在分派批处理时将必要的ID存储在批处理名称中。稍后,您可以从
then
和catch
闭包中的批处理名称中检索ID。这允许您异步处理闭包。