- requestTask.onChunkReceived回调转换JSON报错?
大佬们帮忙看看这个问题,调用的是百度的大模型平台,因为返回的的数据流前边都带 data: 无奈只能去掉前边的,然后再转换JSON, 但是发现转换JSON时会偶发报错.并不是每次回调都会报错.如图其实是有三次回答,第一次成功了,第二次就失败了.搞不懂是不是两次之间太快了?偶发 [图片] send() { var that = this; that.setData({ text: '' }) var data = { messages: [ { 'role': 'user', 'content': that.data.text0 } ], stream: true } var requestTask = wx.request({ url: 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k?access_token=XXXXX', data: JSON.stringify(data), method: 'POST', enableChunked: true, success: function (r) { }, fail: function (r) { } }) requestTask.onChunkReceived(function (resp) { var str = textDecoder.decode(resp.data) console.log(str) if (str.startsWith('data:')) { str = str.slice(5); var str2 = JSON.parse(str) console.log(str2) var is_end = str2.is_end; var result = str2.result; var text = that.data.text; text += result; that.setData({ text: text }) if (is_end) { requestTask.offChunkReceived() } } }); },
2024-07-19 - 微信小程序不支持TextDecoder
// 将十六进制字符串转中文:hex为十六进制字符串 encoding为编码格式,默认是utf-8 export function hexToStr(hex,encoding) { // 去掉字符串首尾空格 let trimedStr = hex.trim() // 判断trimedStr前两个字符是否为0x,如果是则截取从第三个字符及后面所有,否则返回全部字符 let rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr // 得到rawStr的长度 let len = rawStr.length // 如果长度不能被2整除,那么传入的十六进制值有误,返回空字符 if (len % 2 !== 0) { return "" } let curCharCode // 接收每次循环得到的字符 let resultStr = [] // 存转换后的十进制值数组 for (let i = 0; i < len; i = i + 2) { curCharCode = parseInt(rawStr.substr(i, 2), 16) resultStr.push(curCharCode) } // encoding为空时默认为utf-8 let bytesView = new Uint8Array(resultStr) // 8 位无符号整数值的类型化数组 // TextEncoder和TextDecoder对字符串和字节流互转 let str = new TextDecoder(encoding).decode(bytesView) return str }
2022-07-21 - ios swiper组件中使用video,全屏错位?
iOS 的 video 组件全屏需要使用 position: fixed 属性。如果 video 的父组件包含 position: relative;position: absolute 等 css 属性( 除 position: static 以外的属性),便会破坏 video 的全屏定位。 因此不要对需要全屏的 video 的任何父组件使用任何 position: relative;position: absolute 等定位属性。
2022-02-28