function parseSseMessage(message) {
// 分割消息字符串
var parts = message.split('\n');
var parsedMessage = {};
// 解析每一部分
parts.forEach(function (part) {
// 忽略空行
if (!part.trim()) return;
// 检查是否是数据部分
if (part.startsWith('data:')) {
// 移除 'data:' 前缀并解析JSON
var data = part.substring(5);
parsedMessage.data = JSON.parse(data);
} else {
// 解析其他部分,例如id, event, :HTTP_STATUS
var key = part.split(':')[0];
var value = part.substring(key.length + 2).trim();
parsedMessage[key] = value;
}
});
return parsedMessage;
}
function fun() {
fetch(url, {
method: 'POST',
timeout: 0,
headers: {
"Authorization": key,
"X-DashScope-SSE": "enable",
"Content-Type": "application/json",
},
body: data,
})
.then(async response => {
const reader = response.body.getReader();
let result = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
let result = new TextDecoder().decode(value)
let data = parseSseMessage(result).data.output.thoughts
if (data && data.length >= 2) {
console.log(JSON.parse(data[0].response), JSON.parse(data[1].response))
if (JSON.parse(data[1].response).output) {
// 这里就是流返回的内容,可能外层包裹的格式有变化,自己改点东西应该就能看到了
console.log(JSON.parse(JSON.parse(data[1].response).output).result);
}
}
}
})
.then(data => {
// 处理返回的数据
console.log(data);
})
.catch(error => {
// 处理错误
console.error('请求失败:', error);
});
}
代码不是通用,也许结构不同,返回的内容自己修改修改应该就好了。