我试图并行地对我的数据库对象执行一些处理(things
),我使用这个包并行运行事物
https://github.com/spatie/async
我想知道我的事情有多少已经被成功处理,所以我$stats
在全局范围内定义了数组并尝试从内部更新它
$pool = Pool::create();
$things = Thing::all();
$stats = [
'total' => count($things) ,
'success' => [] ,
];
foreach ($things as $thing) {
$pool->add(function () use ($thing , $stats ) {
// do stuff
return [$thing , $stats] ;
})->then(function ($output ) {
// Handle success
list( $thing , $stats) = $output ;
dump('SUCCESS');
$stats['success'][$thing->id] = $thing->id ;
}) ->catch(function ($exception){
// Handle exception
dump('[ERROR] -> ' . $exception->getMessage());
});
}
$pool->wait();
dump($stats);
即使我在输出中看到成功,但当我转储时,$stats最后success总是空的
array:3 [▼
"total" => 3
"success" => []
]
我也尝试过,stats但then没有use 什么区别
})->then(function ($output ) use ($stats)
当我转储$stats到里面时then,我可以看到数据工作正常
})->then(function ($output ) {
// Handle success
list( $thing , $stats) = $output ;
dump('SUCCESS');
$stats['success'][$thing->id] = $thing->id ;
dump( $stats);
})
内部转储的输出then
array:3 [▼
"total" => 3
"success" => array:1 [▼
2 => 2
]
]
ITMISS