Angular上服务器发送事件会造成多次调用
创始人
2024-10-29 10:00:58
0

为了解决此问题,您可以添加“take(1)”操作符来在第一次触发时停止订阅。这将确保触发事件仅会进行一次请求。以下是示例代码:

import {
  Injectable,
  NgZone
} from '@angular/core';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class ServerSentEventsService {
  constructor(private ngZone: NgZone) {}

  getServerSentEvent(url: string): Observable {
    return Observable.create(observer => {
      const eventSource = new EventSource(url);

      eventSource.onmessage = event => {
        this.ngZone.run(() => observer.next(event));
      };

      eventSource.onerror = error => {
        this.ngZone.run(() => observer.error(error));
      };

      return () => {
        eventSource.close();
      };
    }).take(1);
  }
}

我们在Observable创建之后添加了“ .take(1) ”。这将关闭Observable,以便在第一次触发后不再调用它。

请注意,您需要从“Rxjs/Observable”导入“ take”操作符。

在这种情况下,我们没有必要再监听EventSource的“ onopen”事件,因为它实际上只会在首次订阅后发生。

相关内容

热门资讯

一分钟揭秘!微乐三带辅助,广西... 一分钟揭秘!微乐三带辅助,广西友玩修改器,插件教程(真的有开挂)是一款可以让一直输的玩家,快速成为一...
玩家必知教程!四川途游小程序辅... 玩家必知教程!四川途游小程序辅助破解版,微乐斗地主有挂,玩家教你(真的是有开挂);四川途游小程序辅助...
玩家必看科普!蜀渝牌乐汇辅助,... 玩家必看科普!蜀渝牌乐汇辅助,中至辅助器,总结教程(真的是有开挂)是一款可以让一直输的玩家,快速成为...
记者揭秘!超凡辅助软件,雀神麻... 记者揭秘!超凡辅助软件,雀神麻雀科技公司,解说技巧(有开挂)是一款可以让一直输的玩家,快速成为一个“...
关于!河洛刚次辅助,新西部牛牛... 关于!河洛刚次辅助,新西部牛牛辅助,微扑克教程(是有开挂);相信小伙伴都知道这个新西部牛牛辅助上存在...
传递经验!边锋老友辅助,凑一桌... 传递经验!边锋老友辅助,凑一桌游戏关春天辅助,教你攻略(真的有开挂);1、不需要AI权限,帮助你快速...
我来教大家!微信小游戏万年修改... 我来教大家!微信小游戏万年修改器,江西微乐家乡辅助脚本,AI教程(真的有开挂)是一款可以让一直输的玩...
必知教程!约战平台辅助,福建大... 必知教程!约战平台辅助,福建大玩家十三水辅助,曝光教程(有开挂)是一款可以让一直输的玩家,快速成为一...
技巧知识分享!雀友会广东潮汕辅... 技巧知识分享!雀友会广东潮汕辅助脚本,丽水都莱辅助器软件,AA德州教程(有开挂)是一款可以让一直输的...
避坑细节!福建天天开心技巧,都... 避坑细节!福建天天开心技巧,都莱辅助软件,技巧教程(有开挂);福建天天开心技巧是一款益智类棋牌手游,...