赞
踩
// 基础库为2.33.0
const requestTask = wx.request({
url: `xxxxxxxx`, // 需要请求的接口地址
enableChunked: true // enableChunked必须为true
})
// 开发工具存在问题,使用真机测试
const listener = data => {
// data为返回的数据,可以在此对数据进行处理
}
// 监听服务端返回的数据
requestTask.onChunkReceived(listener)
// 移除监听 需传入与监听时同一个的函数对象
requestTask.offChunkReceived(listener)
注意:
function arrayBufferToString(arr){ if(typeof arr === 'string') { return arr; } var dataview = new DataView(arr); var ints = new Uint8Array(arr.byteLength); for(var i=0;i<ints.length;i++){ ints[i]=dataview.getUint8(i); } var str = '', _arr = ints; for(var i = 0; i < _arr.length; i++) { if (_arr[i]) { var one = _arr[i].toString(2), v = one.match(/^1+?(?=0)/); if(v && one.length == 8) { var bytesLength = v[0].length; var store = _arr[i].toString(2).slice(7 - bytesLength); for(var st = 1; st < bytesLength; st++) { if ( _arr[st + i]) { store += _arr[st + i].toString(2).slice(2); } } str += String.fromCharCode(parseInt(store, 2)); i += bytesLength - 1; } else { str += String.fromCharCode(_arr[i]); } } } return str; }
// 我的数据是json字符串,如果出现分开返回,在转json时,会出现报错,所以使用try处理 let timer = null const arr = [] const listener = data => { try { // 上次结果出现报错 这次正常 清除延时器 if (timer) { clearTimeout(timer) timer = null } // 小程序存在数据截开的情况 存五次数据 if (arr.length > 4) { arr.shift() } // 这里要存储的是arrayBuffer,不能存储string数据 arr.push(data.data) // 数据处理 ....... } catch (e) { // 最后一次出现报错 三秒后重组数据 timer = setTimeout(() => { const len = arr.length let index = len - 2, data = arr[len - 1], result = null while(index > -1) { // 从后往前 合并 data = mergeArrayBuffers(arr[index], data) try{ // 数据处理 ....... index = -1 }catch(e){ index -= 1 } } }, 3000) } }
// 合并arrayBuffer
function mergeArrayBuffers(buffer1, buffer2) {
if (!buffer1) {
return buffer2;
} else if (!buffer2) {
return buffer1;
}
var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
tmp.set(new Uint8Array(buffer1), 0);
tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
return tmp.buffer;
}
requestTask.abort()
断开连接Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。