- canvas id 过长时 createSelectorQuery 有几率无法获得 node
为了防止服用组件的时候 id 重复,我用 uuid 作为 canvas 的 id,例如下面的代码。但是发现这种会导致较大几率 createSelectorQuery 获取不到 node(在开发者工具里有的时候刷新一次页面就又能获取到了)。将 id 改成一个比较比较短的字符串就不会有这个问题 createSelectorQuery() .select(`#4743a8cd-bfa8-4c40-816b-49fe8e848843`) .fields({ node: true, size: true }) .exec((res) => { const canvas = res[0].node; // node 有几率为 null })
01-30 - 微信开发者工具 enableChunked 为 true 和 false 返回数据不一样
问题描述: 微信开发者工具中,当接口返回数据为二进制编码的字符串,且原始字符串含有非 ASCII 字符时,enableChunked 为 true 和 false 返回数据不一样。 真机没有这个问题。 复现步骤: 我们的服务器会以 'Transfer-Encoding': 'chunked' 的方式返回二进制数据,数据内容为编码后的字符串。 示例服务器实现: const http = require('http'); const server = http.createServer((req, res) => { const encoder = new TextEncoder(); res.writeHead(200, { 'Transfer-Encoding': 'chunked', }); const data = encoder.encode('你好'); // 当原始内容包含非 ASCII 字符的时候触发这个 bug // data is Uint8Array [228, 189, 160, 229, 165, 189] res.write(data); res.end(); }); server.listen(8000, () => { console.log('Server running on port 8000'); }); 在使用小程序的 request 接口访问这个接口时,如果不设置 enableChunked,在 sucess 回调中获取的数据是正常的,并且可以正确 decode。 wx.request({ url: 'http://localhost:8000', responseType: 'arraybuffer', enableChunked: false success: (res) => { console.log(new Uint8Array(res.data)); // Uint8Array [228, 189, 160, 229, 165, 189] 正确,跟服务端发出的一样 }, }); 如果设置 enableChunked 为 false,在 onChunkReceived 回调中获取的数据时错误的,并且无法正确 decode const task = wx.request({ url: 'http://localhost:8000', responseType: 'arraybuffer', enableChunked: true }); task.onChunkReceived((res) => { console.log(new Uint8Array(res.data)); // Uint8Array [96, 125] 错误,跟服务端发出的不一样 }) 说明: 这个问题只在开发者工具上发现,真机没有这个问题。只有原始字符串包含非 ASCII 字符的时候会出现这个问题。比如把“你好”换成“Hello”就没事
2023-05-14