SSE流数据请求处理

小程序支持

     // 小程序支持
    const requestTask = uni.request({
      url: "http://192.168.1.66/chat/sse",
      timeout: 15000,
      responseType: "text",
      method: "post",
      enableChunked: true, //配置这里
      data: { question: "你好" },
      success: (response) => {
        console.log("成功", response);
      },
      fail: (error) => {
        console.log("失败", error);
      },
      complete: (res) => {
        let ret = JSON.stringify(res);
        console.log("完成", ret);
      },
    });
    requestTask.onHeadersReceived(function (res) {
      console.log("开始", res.header);
    });

    // 这里监听消息
    requestTask.onChunkReceived(function (res) {
      let decoder = new TextDecoder("utf-8");
      let str = decoder.decode(new Uint8Array(res.data));
      let falgData = JSON.parse(str.split("data: ")[1]);
      msg.value += falgData.data;
      console.log("接收数据", falgData.data);
      // setTimeout(() => {
      //   // 中断请求任务
      //   requestTask.abort();
      // }, 3000);
    });

H5支持

    // H5支持
    import { fetchEventSource } from "@microsoft/fetch-event-source";
    
    const ctrl = new AbortController(); //用于中断请求
    fetchEventSource("http://192.168.1.66/chat/sse", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        // "Content-Type": "text/event-stream",
      },
      body: JSON.stringify({
        question: "你好",
      }),
      // signal: ctrl.signal, // 用于中断请求
      onopen(response) {
        console.log("连接成功", response);
      },
      onmessage(msg) {
        console.log("接收", msg);
      },
      onclose() {
        console.log("连接关闭");
      },
      onerror(err) {
        console.log("连接错误", err);
      },
    });

 

posted @ 2024-05-22 15:40  xuanPhoto  阅读(479)  评论(0)    收藏  举报