<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 事件 [Event Emitter 事件發射器](https://www.npmjs.com/package/@nestjs/event-emitter) 包(`@nestjs/event-emitter`)提供了一個簡單的觀察者實現,允許你訂閱和監聽在你應用中發生的不同事件。事件服務器是將應用程序的不同部分解耦的一個偉大的方法,因為一個事件可以被不同的監聽者監聽,且他們之間并不互相依賴。 `EventEmitterModule`在內部使用[eventmitter2](https://github.com/EventEmitter2/EventEmitter2)包。 ### 開始 首先安裝依賴。 ```bash $ npm i --save @nestjs/event-emitter ``` 安裝完成后,在`root`的`AppModule`中引入`EventEmitterModule`并且在`forRoot()`靜態方法中運行: ```TypeScript import { Module } from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; @Module({ imports: [ EventEmitterModule.forRoot() ], }) export class AppModule {} ``` `.forRoot()`調用與初始化事件發射器并注冊應用程序中各個聲明的事件監聽器。注冊發生在`onApplicationBootstrap`生命周期鉤子開始的時候,以確保所有模塊都已加載,所有定時任務已聲明。 配置文件在`EventEmitter`實例中,在`forRoot()`方法中傳遞配置對象,如下: ```TypeScript EventEmitterModule.forRoot({ // set this to `true` to use wildcards wildcard: false, // the delimiter used to segment namespaces delimiter: '.', // set this to `true` if you want to emit the newListener event newListener: false, // set this to `true` if you want to emit the removeListener event removeListener: false, // the maximum amount of listeners that can be assigned to an event maxListeners: 10, // show event name in memory leak message when more than maximum amount of listeners is assigned verboseMemoryLeak: false, // disable throwing uncaughtException if an error event is emitted and it has no listeners ignoreErrors: false, }); ``` ### 分派事件 要分派一個事件(例如 `fire`), 使用標準構造函數注入`EventEmitter2`。 ```TypeScript constructor(private eventEmitter: EventEmitter2) {} ``` > `EventEmitter2` 從 `@nestjs/event-emitter` 包中導入。 然后在類中使用它: ```TypeScript this.eventEmitter.emit( 'order.created', new OrderCreatedEvent({ orderId: 1, payload: {}, }), ); ``` ### 監聽事件 要聲明一個事件監聽器,用`@OnEvent()`裝飾器裝飾一個方法,裝飾器在包含要執行代碼的方法之前,如下: ```TypeScript @OnEvent('order.created') handleOrderCreatedEvent(payload: OrderCreatedEvent) { // handle and process "OrderCreatedEvent" event } ``` > 事件訂閱器不能是請求范圍的。 在簡單的事件發射器中,第一個參數可以是`字符串`或者`符號`,在通配的事件發射器中,可以是`字符串|符號|數組<字符串|符號>`。第二個參數(可選的)是一個監聽器的選項對象([參見這里](https://github.com/EventEmitter2/EventEmitter2#emitteronevent-listener-options-objectboolean))。 ```TypeScript @OnEvent('order.created', { async: true }) handleOrderCreatedEvent(payload: OrderCreatedEvent) { // handle and process "OrderCreatedEvent" event } ``` 要使用命名空間或者通配符,傳遞`wildcard`選項到`EventEmitterModule#forRoot()`方法中。當命名空間/通配符啟用時,事件可以是句點隔開的(`foo.bar`)形式或者數組(`['foo','bar']`),句點也可以配置為一個配置屬性(`delimiter`)。命名空間啟用時,你可以使用通配符訂閱事件。 ```TypeScript @OnEvent('order.*') handleOrderEvents(payload: OrderCreatedEvent | OrderRemovedEvent | OrderUpdatedEvent) { // handle and process an event } ``` 注意,這樣的通配符僅對一個塊有效。參數`order.*`將匹配例如`order.creted`和`order.shipped`事件,但不會匹配`order.delayed.out_of_stock`。要監聽這樣的事件,使用`多層通配符`模式(例如`**`)。見`EventEmitter2`[文檔](https://github.com/EventEmitter2/EventEmitter2#multi-level-wildcards)。 ```TypeScript @OnEvent('**') handleEverything(payload: any) { // handle and process an event } ``` > `EventEmitter2`類提供了一些有用的方法來和事件交互,例如`waitFor`和`onAny`,參見[這里](https://github.com/EventEmitter2/EventEmitter2)。 ## 示例[#](#example) [此處](https://github.com/nestjs/nest/tree/master/sample/30-event-emitter)提供了一個工作示例。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看