当前位置: 首页 > wzjs >正文

在线图片编辑器精简版南宁seo服务优化

在线图片编辑器精简版,南宁seo服务优化,有没有做英语试题的网站,网站建设技术合作合同书引言: 最近在做的ai项目,产品提了一个需求,要求如果ai正在输出内容,用户再次提交了prompt,终止当前的请求,去发送新的请求 代码示例 封装请求 export const getAiMessage ({ message, session_id, callback, signal }) > {fetch(${baseURL}/api/question/ask, {method:…

引言:

最近在做的ai项目,产品提了一个需求,要求如果ai正在输出内容,用户再次提交了prompt,终止当前的请求,去发送新的请求

代码示例

封装请求

export const getAiMessage = ({ message, session_id, callback, signal }) => {fetch(`${baseURL}/api/question/ask`, {method: "POST",headers: {"Content-Type": "application/json",Authorization: sessionStorage.getItem("token") || "",},body: JSON.stringify({ message, session_id: session_id || "" }),signal: signal,}).then(async (response) => {// 请求成功if (response.ok) {const reader = response.body.getReader();const decoder = new TextDecoder("utf-8");while (true) {try {const { value, done } = await reader.read();if (done) {break;}const chunkValue = decoder.decode(value).split("\n\n");for (const item of chunkValue) {if (item.startsWith("data:")) {const itemData = JSON.parse(item.replace("data:", " ").trim());callback(itemData);}}} catch (e) {if (e.name === "AbortError") {console.log("请求已取消", e);return;}console.log("数据流读取出错", e);}}console.log("响应结束");}}).catch((e) => {if (e.name === "AbortError") {console.log("请求已取消", e);} else {console.log("请求出错", e);}});
};

页面使用 

handleSend(e) {if (e) {e.preventDefault();}if (!this.userPrompt || this.isMessageLoading) {return;}if (this.streamController) {this.streamController.abort();}this.isMessageLoading = true;this.aiMessageList.push({role: "user",content: this.userPrompt,});this.changeMessageScroll();const aiMessageIndex = this.aiMessageList.length;this.aiMessageList[aiMessageIndex] = {role: "assistant",content: "",};this.streamController = new AbortController();const obj = {message: this.userPrompt,session_id: this.session_id,callback: (res) => {this.isMessageLoading = false;this.result += res.text;this.session_id = res.session_id;const converter = new showdown.Converter();this.aiMessageList[aiMessageIndex] = {role: "assistant",content: converter.makeHtml(this.result),};this.changeMessageScroll();},signal: this.streamController.signal,};this.userPrompt = "";this.result = "";getAiMessage(obj);},

代码详解

我们主要通过创建AbortController对象,将AbortController中的signal传递给fetch,然后通过调用AbortController的abort方法去取消请求,主要代码如下

 

如果想取消请求,在想取消请求的代码逻辑处 调用abort方法就好

错误处理 

成功取消请求后会被 catch 捕获。注意 ! ! ! !,如果使用的是流式请求,一定要在每次处理接收到的流数据时进行错误处理,并在捕获到错误时使用 return 退出当前方法。否则,请求会继续进行,并且错误信息会不断打印,导致页面卡死。因为我们取消请求,也只是抛出了一个请求取消的报错信息,具体的代码逻辑需要我们自己处理。

 

http://www.dtcms.com/wzjs/103246.html

相关文章:

  • 网站改版说明深圳做网站的
  • 网络推广引流是做什么的seo推广外包
  • 网站维护一年多少费谷歌搜索引擎营销
  • 买的服务器怎么做网站网络广告的概念
  • 微信人生里面微网站怎么做自己做网站
  • 木藕设计网站大全灰色词秒收录代发
  • magento 做的最牛逼的中文网站潍坊做网站哪家好
  • wordpress是瀑布流吗谷歌优化的最佳方案
  • 以绿色为主色的网站模版怎么在百度上发布信息广告
  • 湛江军警雅苑网站建设招聘专业做网站官网
  • 网站建设龙头企业外贸网站优化推广
  • 加强网站建设考察交流seo外包公司怎么样
  • 中学网站建设 课设软件推广的渠道是哪里找的
  • 情侣手表网站只要做好关键词优化
  • 建设部一建注册网站seopc流量排行榜企业
  • 物流货运网站搜索推广公司
  • 惠阳市网站建设360网址大全
  • 房山网站建设怎么样seo的基本步骤是什么
  • php动态网站开发app投放推广
  • wordpress的内链插件seo快排技术教程
  • 江西网站建设公司费用河南网站顾问
  • 可以做黄金期权的网站精准营销
  • 大连专业手机自适应网站制作企业seo顾问服务
  • 邢台网站建设信息镇江网站建站
  • 做慕墙上什么网站好找事做如何推广自己成为网红
  • 注册国际贸易公司需要多少钱优化营商环境 助推高质量发展
  • 网络618营销策划方案浙江关键词优化
  • 杭州做网站公司哪家好seo查询软件
  • 做网站用的产品展示横幅落实20条优化措施
  • 网站平台建设规划seo的中文意思