前端 fetchEventSource (sse)

前言:为什么要用这个而不是原生的EventSource ,因为原生的不支持post请求,以及参数携带等

1、安装 npm install @microsoft/fetch-event-source

2、

// sse
import { fetchEventSource } from '@microsoft/fetch-event-source'
import { getUserJWTtoken } from '@/utils/auth'

// 参数处理
const factory = (options) => (
    (options.method = options.method || 'POST'),
    (options.headers = {
        'Content-Type': 'application/json',
        Authorization: getUserJWTtoken(),
        ...options.headers
    }),
    (options.body = options.body || {}),
    options
)
// 参数处理
export default function () {
  return {
    // 开始sse
    start: async (url, options = {}, callback) => {
      try {
        if (!url) {
          console.log('请输入有效url')
          return
        }
        await fetchEventSource(url, {
          ...factory(options),
          openWhenHidden: true,
          onmessage(event) {
            if (event.data === '[DONE]') return
            if (event.data.length !== 0) {
              callback({ status: 'running', message: JSON.parse(event.data) })
            }
          },
          onerror(error) {
            callback({
              status: 'finish',
              message: '服务器出错了, 请稍后重试.....',
              error: true,
            })
            throw error // 必须抛出错误,否则停止不了
          },
          onclose(msg) {
            callback({ status: 'finish', message: '读取结束' })
          },
        })
      } catch (error) {
        console.log(error)
      }
    },
    // 停止sse
    stop: () => {},
  }
}

3、使用

<script setup>
import sseHook from './hook/eventSource.js'
const sse = sseHook()

sse.start('接口路径', options配置, callback回调函数)

</script>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值