首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel等待一个特定的排队侦听器完成,然后返回

Laravel等待一个特定的排队侦听器完成,然后返回
EN

Stack Overflow用户
提问于 2022-09-06 10:32:24
回答 3查看 326关注 0票数 1

我有一个事件,有一群排队的听众。我无法运行sync,因为我正在调用外部API等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Events\Invoice\InvoiceEvent::class => [
    Listeners\Invoice\Listener1::class, // should queue
    Listeners\Invoice\Listener2::class, // should queue
    Listeners\Invoice\Listener3::class, // Should NOT queue......
    Listeners\Invoice\Listener4::class, // should queue
    Listeners\Invoice\Listener5::class, // should queue
],

从控制器方法调用此事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function store(Request $request)
{
    $invoice = Invoice::findOrFail($request->id);
    InvoiceEvent::dispatch($invoice); // Async event, it cannot be sync

    return $invoice; // need to return only when Listener3 finish execution
}

return $invoice依赖于Listener3,否则它将返回不完整的数据。

在完成执行 Listener3时,如何只返回Listener3?

我想出了sleep(10);,但这不是一个理想的解决方案。

Listener3将数据从第三方API保存到需要返回的发票表中,这就是为什么不能返回不完整的发票数据的原因,现在所需的数据被添加到发票中,但在它返回之后。

EN

回答 3

Stack Overflow用户

发布于 2022-09-15 23:10:23

PHP本身是同步的。除非您将这些事件或侦听器推入队列(即class Listener3 implements ShouldQueue),否则它们应该按顺序运行。但是,您可能需要重新考虑代码的结构。

侦听器最好是对事件的反应,即副作用,独立于应用程序的其余部分运行。作业、事件和侦听器一般不应返回值(除非halt返回一系列侦听器)。在您的例子中,发票正在经历多个步骤,包括调用第三方API。想法:

  1. 创建一个服务类,该类执行发票上的任务,并在完成后将发票返回给控制器(然后控制器将返回$invoice数据到前端)
  2. 如果希望进程是异步的,请考虑使用推送通知。分派一个在发票上执行任务的作业,然后在发票准备好提取时通知前端(例如推手 )。
票数 2
EN

Stack Overflow用户

发布于 2022-09-19 11:52:32

有一种方式可以广播你的事件而不是排队,

在事件类中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;

因此,类声明必须实现ShouldBroadcastNow

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class NotQueueEvent implements ShouldBroadcastNow { ... }

此扩展事件不带队列。

票数 0
EN

Stack Overflow用户

发布于 2022-09-06 10:54:36

如果要等待此方法返回,则不应将其放在队列中。运行事件并等待返回。不知道我是否正确地理解了这个问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73626415

复制
相关文章
selenium之等待页面(或者特定元素)加载完成
文章目录 需求: 1、显示等待(推荐) 2、隐式等待(也不错) 3、time.sleep(一般不推荐) 需求: 有时候,我们使用selenium用来获取一些元素时,需要等待页面将某些元素加载网站才能够获取我们需要的数据,所以,这时候我们就需要等待页面的功能。
kirin
2021/03/18
5.3K0
Ajax等待返回结果时,弹出一个友好的等待提示
jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。
似水的流年
2019/12/13
3.9K0
Ajax等待返回结果时,弹出一个友好的等待提示
巧用Ajax的beforeSend 提高用户体验 jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作。 具体可参考jquery官方文档:http://api.jquery.com/Ajax_Events/ $.ajax({       beforeSend: function(){        // Handle the beforeSend event       },       c
似水的流年
2018/01/18
5K0
laravel 预加载特定的列
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112351.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
7130
laravel 预加载特定的列
Kubernetes等待部署完成
在CI/CD的时候,我们有时候需要等待部署完成,pod已经正常运行后,再进入容器执行一些命令,例如laravel环境下,我们需要等pod起来后,再执行migrate。
少羽大怪兽
2020/11/12
1K0
R语言中如何使用排队论预测等待时间?
顾名思义,排队论是对用于预测队列长度和等待时间的长等待线的研究。这是一种流行的理论,主要用于运营,零售分析领域。
拓端
2021/10/21
1.3K0
Kubernetes等待部署完成 kubectl wait rollout
使用kubectl apply或者create命令创建/更新部署后,其pod需要时间完成创建/更新。 如果在CI中不等待所有pod更新完成,下一步流程很有可能使用更新前的环境。
py3study
2021/02/04
1.4K0
jquery等待特定元素加载再执行相关函数
默认是执行100次,每次间隔20毫秒,最长等待时间是2000毫秒(2秒),如果要一直等待到元素出现,可以将100改成任意负数。
怪兽
2022/10/04
1.4K0
冰点还原提示确保待定的windows更新已完成,然后重试
在桌面按win+R,打开的运行窗口中,输入命令services.msc,然后点击确定按钮。 找到Windows Update,右键点击该服务项,在弹出菜单中选择“停止”,设置为禁用。 找到Background Intelligent Transfer Service,右键单击并停止该服务,并同样设置为禁用。 接下来打开C盘,找到c:WindowsSoftwareDistributionDownload文件夹,直接删除该文件夹。 之后就可以正常冻结系统了。
似水的流年
2022/04/11
3.8K0
冰点还原提示确保待定的windows更新已完成,然后重试
Vue的 侦听器 watch
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,
wust小吴
2019/12/27
6550
侦听器watch
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。 这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。
名字是乱打的
2021/12/22
6850
侦听器watch
Management APIs
以太坊是目前最流行的智能合约平台之一,其开放的管理API使得开发者可以轻松地管理和监控以太坊网络。本文将介绍以太坊的管理API,包括如何使用它们来管理以太坊网络、监控节点和查询以太坊区块链的状态,无论你是初学者还是经验丰富的以太坊开发者,本文都将为你提供有价值的信息和指导
Al1ex
2023/09/07
2711
Management APIs
2021-05-21:给定一个数组arr,先递减然后递增,返回arr中有
2021-05-21:给定一个数组arr,先递减然后递增,返回arr中有多少个绝对值不同的数字?
福大大架构师每日一题
2021/05/21
5530
2021-05-21:给定一个数组arr,先递减然后递增,返回arr中有
Laravel 5.2+ 使用url()全局函数返回前一个页面的地址
注意:文章标题中5.2+表示该文章内容可向上兼容,适用于Laravel版本5.2及更高(目前最新为5.6),但不可向下兼容,即不适用于5.2版本以下。推荐大家花一点点时间,将自己的Laravel更新至5.6版本。
全栈程序员站长
2022/07/08
1.3K0
2729: [HNOI2012]排队
2729: [HNOI2012]排队 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 957  Solved: 449 [Submit][Status] Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述。 对于 30%的数据
HansBug
2018/04/10
5800
点击加载更多

相似问题

将另一个构建排队,然后等待生成完成。

20

等待任务完成,然后返回

21

等待setState完成,然后返回数据

234

RxSwift等待observable完成,然后返回observable

117

等待函数完成,然后返回对象

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文