fetch 流式响应

46 阅读1分钟
 fetch(url, opt)
    .then((res) => {
      if (res.ok) return Promise.resolve(res);
    })
    .then((res_) => {
      //创建一个阅读器并将流锁定到它。当流被锁定时,在这个阅读器发布之前,无法获得其他阅读器
      const reader = res_.body.getReader();
      const utf8Decoder = new TextDecoder('utf-8');
      //定义一个对象存储每次拿到的数据
      return reader.read().then(function push({ value, done }) {
        if (done) {
          //表示数据流结束
          console.log('流式结束了');
        } else {
          let _value = value ? utf8Decoder.decode(value, { stream: true }) : '';
          const arr = (_value || '').replace(/\s/g, '').split('data:') || [];
          console.log("每次响应结果",arr)
        }
        return reader.read().then(push);
      });
    });