问题标签 [event-dispatching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
400 浏览

php - 事件调度程序是合适的解决方案吗?

我正在开发一个 API 项目,该项目需要在响应返回给客户端之后(或之前取决于实现)发送电子邮件和存储统计信息。对于这两种情况,我都在考虑 Symfony 的 EventDispatcher 组件(我没有使用 Symfony 作为框架),因此每个控制器操作都会分派一个事件以将电子邮件添加到队列中或将数据插入到统计数据库表中。

所以事情看起来像这样

我正在考虑这个,因为我希望这个内部操作尽可能地异步。这是适合这种情况的解决方案吗?

编辑:正如Jovan Perovic建议的那样,我正在添加更多信息。API 是一个 REST API,用户通过 Web 或移动应用程序与其通信,我想记录、存储统计信息和发送通知(主要是电子邮件)而不影响 API 的性能,第一个想法是使用返回后运行的东西对客户端的响应,但我不知道是否可以使用 EventDispatcher。即使使用队列来处理统计信息或通知,我也需要一个集中的地方,所有控制器都可以在其中发送信息,以便写入日志并存储统计信息。

我希望我的目标现在更加明确。对不起。

0 投票
0 回答
75 浏览

symfony - (symfony 事件调度器)何时调度事件?

Symfony EventDispatcher在我的项目中使用。

我的项目中有一个交易/支付系统,用户可以创建一个order,订单的状态是unpaied,当用户通过paypal支付订单时,paypal会触发一个trade finish hook,我的项目PayNotifyController会收到钩子。

所以问题是,我应该pay.success在收到钩子时发送事件,还是在将订单状态更新为之后paid

伪代码:

然后添加一个事件订阅者将订单状态更新为paid.

或者

0 投票
2 回答
3660 浏览

php - Symfony - 事件未发送

这是我第一次使用创建自定义事件调度程序和订阅者,所以我试图绕开它,我似乎无法找出为什么我的自定义事件没有被调度。

我正在关注文档,就我而言,一旦有人在网站上注册,我就需要发送一个事件。

所以在我的内部我registerAction()试图发送这样的事件

这是我的RegistrationEvent

这是我的RegistrationSubscriber

完成此操作后,我希望注册过程将在该函数处停止,onRegistration但这并没有发生,然后我查看了分析器的事件选项卡,我也没有看到我的事件列出了它们。

我在这里想念什么?朝着正确的方向推动将不胜感激。

更新: 我想我需要为自定义事件注册一个服务,所以我在里面添加了以下代码services.yml

在探查器的事件选项卡中,我确实看到我的自定义事件被列出,但它仍然没有调度。

0 投票
1 回答
1853 浏览

javascript - Chrome 不会触发 SVG 元素的点击事件(Firefox 会)

我观察到在处理各种浏览器(Chrome、Edge、Firefox)之间的点击事件时存在不一致/错误。

在我使用 SVG 的 JavaScript 库中,我创建了可点击和可拖动的矩形。当我在 Chrome 浏览器中运行我的代码段时,如果画布上存在 2 个或更多元素,则单击事件不会触发。

要检查这一点,您需要在画布上创建至少 2 个矩形。您可以用鼠标拖动它们(矩形初始位置相同)。如果在元素上触发单击事件,通常矩形的边框会变为棕色。

奇怪的是,Firefox 会按预期触发点击事件,但 Chrome 根本不会触发该事件。MS Edge 浏览器在双击时触发click事件。

PS:这里的代码是完整的,所以你可以运行这个例子:

0 投票
1 回答
507 浏览

reactjs - Redux 最佳实践中的调度操作?

我有一个正在工作的大型项目,并且想知道调度操作的正确方法。

在我的组件容器中,我映射了这个函数。

您可以看到我正在将调度功能传递给我的服务。

我需要传递调度,因此如果套接字事件失败,我可以在服务内调度错误操作。

这可以吗?还是将调度始终保存在容器中会更好。如果我将那个套接字服务函数变成一个承诺,那么我可以这样做,但是我们可能会在容器中的调度函数中添加太多逻辑?

传递调度对象可以吗?

编辑:这是我的套接字服务的片段。在我的套接字发出的错误事件中,我需要调度一个错误:

然后在我的 actions.js 中,我有这些操作:

0 投票
1 回答
629 浏览

php - Symfony EventDispatcher 订阅者不工作

以下代码

它假设调度一个TransactionCreated事件并被类本身捕获并onCreatedNewTransaction调用函数以设置类的属性。

Transaction实例化像

但是当我调试项目时,该$Transaction对象具有null值。我设置了一个breakpointatonCreateNewTransaction方法,我发现因此函数没有被调用。

更新

问题解决了

`onCreateNewTransaction' 应该是公开的而不是私有的

0 投票
0 回答
379 浏览

laravel-5.3 - Laravel Eloquent 模型事件突然没有被调用

在我的 Laravel 5.3 应用程序中,我使用了几个 Eloquent 模型事件(主要是creating)。直到一周前,他们工作正常,但突然到今天,我注意到他们似乎都不再开火了。

通过框架进行调试表明它们确实都添加到了 Dispatcher::listeners 数组中,但是我找不到应该逐步执行并实际运行它们的代码。将die()命令放在事件回调中什么都不做,表明它们没有真正触发,而且我尝试的任何方法似乎都没有让它们工作。

这是其中一个的示例(这个是一个特征,但我使用的是特征和直接模型的混合):

public static function bootUuidModel() { // On create, generate and assign a UUID static::creating(function (Model $model) { $model->setAttribute(self::getUuidFieldKey(), Uuid::uuid4()->toString()); }); }

有人对为什么这些突然不运行有任何想法吗?我出于各种目的在各种模型中使用它们,但它们似乎都没有运行。最近有没有其他人使用该框架遇到过这些问题?

提前致谢

- 更新 -

好的,所以经过更多调查后,我发现问题是用户对象由于某种原因在 Laravel 的 DatabaseServiceProvider 启动之前启动。出于某种原因,DatabaseServiceProvider::boot() 是事件调度程序被静态分配给模型的地方。因此,用户对象中的任何引导都不会向调度程序注册事件,因为调度程序还不存在。我自己没有启动 User 对象,有谁知道 Laravel 为什么会这样做?

0 投票
1 回答
735 浏览

php - Symfony EventDispatcher 服务标签不在 Symfony 应用程序中

在 Symfony 应用程序中使用Symfony 2.8 Event Dispatcher 和 Container 组件

从我的引导程序/内核文件中:

来自config/services.yml

手动订阅有效,但我希望事件能够自动附加给定 yaml 文件中的标签

0 投票
1 回答
2580 浏览

php - Symfony Doctrine 事件订阅者未在 debug:event-dispatcher 中列出

Symfony v3.3.4,Doctrine ORM v2.5.6

我为一个学说实体创建了一个事件订阅者:

它工作正常!但是很长一段时间我都认为它不起作用,因为侦听器未在 debug:event-dispatcher 命令中列出:

事件侦听器也是如此。还有:监听器和订阅者都没有在 symfony 分析器(事件部分)中列出......所以它可以工作,但奇怪的是监听器没有在调试工具中列出,不是吗?

你能告诉我你的项目是否有同样的行为......

0 投票
1 回答
754 浏览

observer-pattern - EventEmitter、EventTarget 和 EventDispatcher 有什么区别

我正在尝试学习观察者模式的实现。

EventEmitter/EventTarget/EventDispatcher 是观察者模式的一种实现,但我想知道这三者之间的区别。

任何帮助,将不胜感激?