当前位置: 首页>>代码示例>>TypeScript>>正文


TypeScript EventEmitter.createRawConsumer方法代码示例

本文整理汇总了TypeScript中events.EventEmitter.createRawConsumer方法的典型用法代码示例。如果您正苦于以下问题:TypeScript EventEmitter.createRawConsumer方法的具体用法?TypeScript EventEmitter.createRawConsumer怎么用?TypeScript EventEmitter.createRawConsumer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在events.EventEmitter的用法示例。


在下文中一共展示了EventEmitter.createRawConsumer方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。

示例1: function

  channelManager.findOrCreateConsumer = function (topic, options) {
    let channel = consumersByTopic[topic];
    if (channel) return channel;

    let isServiceChannel = (topic[0] === "_");
    channel = consumersByTopic[topic] = new EventEmitter();
    channel.raw = channelManager.createRawConsumer(topic, options);
    channel.setMaxListeners(0);

    let autoConfirm;
    if (options && "autoConfirm" in options) {
      autoConfirm = options.autoConfirm;
    } else {
      autoConfirm = adapterConfig && adapterConfig.autoConfirm;
    }

    // TODO: is it ok to add custom methods to EventEmitter?
    channel.onceConsuming = (channel.raw.onceConsuming) ? function (cb) {
      channel.raw.onceConsuming(cb);
      return channel;
    } : noopCb;

    channel.rejectMessage = (channel.raw.rejectMessage) ? function (message) {
      channel.raw.rejectMessage(message);
    } : noop__;

    channel.confirmProcessedMessage = (channel.raw.confirmProcessedMessage) ? function (message, _safe) {
      // Only use _safe if you can"t know whether message has already been confirmed/rejected
      channel.raw.confirmProcessedMessage(message, _safe);
    } : noop__;

    function onMessage(message) {
      if (messageHasExpired(message)) {
        channel.rejectMessage(message);
        return;
      }
      channelManager.emit(channelManager.CONSUMER_NEW_MESSAGE_EVENT, topic);

      // TODO: emit custom object rather than instance of EventEmitter
      channel.emit("message", message, channel);

      if (autoConfirm) channel.confirmProcessedMessage(message, true);
    }

    function onValidationError(err, message) {
      channel.rejectMessage(message);
    }

    // Validate with envelope schema
    if (!isServiceChannel && config.schema) {
      channel.raw.on("message", validateWithSchema.onEvent(config.schema, onMessage, onValidationError));
    } else {
      channel.raw.on("message", onMessage);
    }

    channel.on("error", function (err, message) {
      if (autoConfirm && message) {
        // Reject when a message has generated an error, e.g. not validated
        channel.rejectMessage(message);
      }
    });

    channel.raw.on("error", channel.emit.bind(channel, "error")); // TODO: wtf?

    // channel.raw.on("consuming", channel.emit("consuming"));

    channelManager.emit(channelManager.CONSUMER_NEW_TOPIC_EVENT, topic);

    if (isServiceChannel || !config.cleanupConsumers) return channel;

    channel.on("removeListener", function (eventName) {
      if (eventName !== "message") return;
      if (consumerTopicsToCheck.indexOf(topic) > -1 || channel.listeners(eventName).length) return;
      consumerTopicsToCheck.push(topic);

      if (consumerTopicsToCheck.length > 1) return;
      setImmediate(checkConsumers);
    });

    return channel;
  };
开发者ID:tcdl,项目名称:msb,代码行数:81,代码来源:channelManager.ts


注:本文中的events.EventEmitter.createRawConsumer方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。