楼主可能需要加强一下 es6 的基础知识: 假设你原来有一个使用 callback 的异步函数:function getData(index, callback) { setTimeout(function () { callback(null, `${index} is done`); }, 1000) } 现在你想借用 es6 的 async 语法糖干掉一大堆难看的 callback,那么可以手动把它用 Promise 包装一下:function asyncGetData(index) { return new Promise(function (resolve, reject) { getData(index, function (err, res) { if (err) { reject(err); return; } resolve(res); }); }); } 对于小程序来说,如果你的代码输出时有用 babel 转换器处理或者开启了开发工具的 es6转es5 、增强编译等功能,那么调用时就可以用 async / await:async function loadData() { // 一般来说,循环中使用 await 是不提倡的,部分 babel 转换器在特殊情况下会产生 bug for (let i = 0; i < 5; i++){ try { const data = await asyncGetData(i); // 请注意 await 几个字不能少,否则 data 将是一个 Promise console.log(`data ${i} = ${data}`); setData({ dataKey: data }); } catch (err) { console.log(`err = ${err}`); } } } 请知悉:内部直接使用了 `await` 的函数必须被声明为 `async` 函数
如何等待异步函数返回后在执行赋值操作?async getData(i){ //这个函数是异步的从服务器获取data //怎么获取略 //最后return data return data; } onLoad:function(){ for(int i=1;i<data.length;i++){ this.setData({ abc[i]:getData(i); }) } } 但是setData执行完了,getData才return,怎么等getData执行完了,我在setData 拒绝使用callback和把操作写到getdata里,因为我就是要for循环。
2020-03-31尚未解决。只能通过减少内存占用稍微缓解。 我们暂时认为这是微信小程序的固有缺陷。测试过很多其它小程序,浏览页面一多全都会触发此 bug。
小程序黑屏问题故障描述:客户端浏览一定数量页面后黑屏 故障详情: 1. 每个页面平均含有 4 - 5 张图片,每张尺寸约为 100 - 200 KB; 2. 浏览约数十个页面后小程序主界面出现黑屏; 3. 黑屏后能够显示顶部标题栏及安卓底部系统按钮(如图); [图片] 4. 黑屏后页面元素能够正常响应操作事件(点击,滑动,页面跳转等,调用 wx.previewImage 仍能打开图片预览); 5. 黑屏后能够点击安卓系统 `返回` 按钮回到上一页,但仍然黑屏。能够打开新页面,但仍然黑屏; 6. 黑屏时未收到 wx.onmemorywarning 告警; 7. 黑屏前性能监控面板显示内存占用约 1000 - 1100 MB; 8. 黑屏后无法显示性能监控面板及 vConsole 按钮。 补充: 1. 使用开发工具真机调试功能似乎不会触发此故障(待确认); 2. IOS 客户端似乎不会触发此故障; 3. 若干用户曾反馈手机(多个品牌)黑屏问题,开发测试使用三星手机复现。该故障可能是普遍现象; 4. 测试手机运行内存为 8GB。
2019-05-24