【发布时间】:2019-10-03 18:47:56
【问题描述】:
我在下面有一个名为ProcessDocumentFields 的监听器。我的监听器类实现了ShouldQueue。
在此,我使用withChain 方法解雇了两个工作,如下所示:
ParseFieldContent::withChain([
new ParseFieldRules($event->document, $fields),
])->dispatch($event->document, $fields);
现在,我想有条件地触发一个事件,最终触发另一个工作。
问题是,两个作业(ParseFieldContent 和 ParseFieldRules)必须已完成运行。
#If below is true, fire off
if ($event->document->stream->settings()->get('field_routing')) {
event(new DocumentDefaultRulesWasProcessed($event->documents));
}
上述事件,会触发同样的两个工作,但我必须先做一些其他检查:
#EventServiceProvider.php
DocumentDefaultRulesWasProcessed::class => [
ProcessDocumentRouteFields::class,
],
在我的ProcessDocumentRouteFields 中,我有:
foreach ($event->routes as $route) {
if ($this->assertIfRouteFieldsShouldBeHandled($route, $event->document)) {
ParseFieldContent::withChain([
new ParseFieldRules($event->document, $route->fields, false),
])->dispatch($event->document, $route->fields);
}
}
正如您在上面看到的,我运行两个相同的作业(ParseFieldContent 和 ParseFieldRules) - 但前提是某个断言为真。
我的问题是:我怎样才能确保放在ProcessDocumentFields 中的作业首先运行,然后当触发 `` 事件时,ProcessDocumentRouteFields 中的作业将运行?
【问题讨论】:
标签: php laravel laravel-5.8