在本篇技术文章中,咱们将运用运用Fetch API构建谈天界面的代码。该代码包括一个ChatInterface类,该类提供了与AI通讯的功用,以完成发送谈天、撤销谈天和获取谈天记录等功用。
功用截图
完好项目地址可在完好代码中找到。
中心思维
这段代码的中心思维是经过运用Fetch API与后端API进行通讯,完成谈天界面的各种功用。它包括了以下关键部分:
-
fetchData
办法:这个办法用于执行Fetch恳求,并回来一个Promise目标以处理异步操作。它发送GET和POST恳求,并处理呼应数据。经过运用这个办法,咱们能够方便地发送恳求和处理呼应。 -
postWithStream
办法:这个办法用于发送带有数据流的POST恳求。它运用Fetch API发送POST恳求,并处理呼应数据流。经过这个办法,咱们能够在恳求过程中逐渐处理呼应数据,而不需要等待整个呼应回来。 -
sendChat
办法:这个办法用于发送谈天音讯。它获取谈天界面中输入的频道ID和问题,并运用 -
cancelChat
办法:这个办法用于撤销谈天。它运用getRequest
办法发送GET恳求,向后端发送撤销谈天的恳求。经过这个办法,咱们能够撤销正在进行的谈天会话。 -
getChatHistory
办法:这个办法用于获取谈天记录。它运用getRequest
办法发送GET恳求,向后端恳求获取谈天记录。经过这个办法,咱们能够获取之前的谈天记录。
中心代码解析
咱们将要点关注以下几个中心部分:
postWithStream
办法
postWithStream(url, body, onData) {
// 运用 fetch 函数发送 POST 恳求
return fetch(url, {
method: "POST", // 指定 HTTP 办法为 POST
headers: {
"Content-Type": "application/json", // 指定恳求内容类型为 JSON
"Custom-Header": "value", // 自定义恳求头
},
body: JSON.stringify(body), // 将 body 参数转换为 JSON 字符串并作为恳求体发送
}).then((response) => {
// 如果呼应状况码不是 2xx,抛出异常
if (!response.ok) {
throw new Error("Network response was not ok.");
}
// 从呼应中获取数据流读取器
const reader = response.body?.getReader();
const decoder = new TextDecoder();
/**
* 递归函数,逐个读取数据块并处理
* @returns {Promise} - 回来一个 Promise 目标,用于处理异步操作
*/
function read() {
return reader?.read().then(({ done, value }) => {
if (done) {
return;
}
const text = decoder.decode(value);
onData(text); // 调用回调函数
return read();
});
}
return read();
});
}
这段代码完成了一个带有数据流的POST恳求的办法。它运用Fetch API发送POST恳求,将恳求办法设置为POST,并将恳求内容类型设置为JSON。恳求体是经过将body
参数转换为JSON字符串并作为恳求体发送。
在获取到呼应后,咱们从呼应中获取数据流读取器,经过递归函数read
逐个读取数据块并进行处理。每次读取到数据块后,咱们运用TextDecoder
将数据块解码为文本,并调用传入的onData
回调函数进行处理。
这个办法对于处理较大的呼应数据流十分有用,能够逐渐获取和处理数据,而不需要等待整个呼应回来。
sendChat
办法
sendChat() {
var _this = this;
var channelId = this.channelIdInput.value;
var question = this.questionInput.value;
var data = {
channelId: channelId,
chat: {
questions: [
{
type: "user",
content: question,
},
],
},
};
this.responseContainer.innerHTML = "";
this.postWithStream(
config.apiUrl + "/sendChat?apikey=" + config.apiKey,
data,
function (text) {
_this.responseContainer.innerHTML += text;
}
);
}
这个办法用于发送谈天音讯。它首要获取谈天界面中输入的频道ID和问题,然后构建一个包括这些数据的data
目标。
在postWithStream
办法的回调函数中,咱们将获取到的文本追加到responseContainer
元素中,完成了在界面上显示谈天的功用。
经过这个办法,能够发送谈天音讯,并在界面上实时显示与AI的交互成果。
结语
以上是代码中比较中心的部分解读,完好项目地址可在完好代码中找到。