wx.canvasToTempFilePath的坑
wx.canvasToTempFilePath 这个API假如我有N张卡片,需要生成绘制N张CANVAS图,生成N张对应的分享图片,调用这个API就会有问题,只生成第一张图片,后面无法生成,还要预估给一个setTimeout延迟,让它绘制完成,能不能改良下这个API,增加一个异步的。
3 回复
this .cardDataList.reduce((curr, r1, k1, arr1) => { return curr.then(() => { return r1.trips.reduce((curr, r2, k2) => { return curr.then(() => { if (r2.triptype === 'flight' ) { return this .drawShareCanvas(k1, k2, arr1); } }); }, Promise.resolve()); }); }, Promise.resolve()); drawShareCanvas(idx1, idx2, array) { ...... ...... return new Promise(resolve => { setTimeout(() => { resolve(); }, 500); }).then(() => { return wx.canvasToTempFilePath({ x: 0, y: 0, width: 216, height: 174, destWidth: 216 * 4, destHeight: 174 * 4, canvasId: aid, success: res => { data.sharePicurl = res.tempFilePath; this .$store.dispatch( 'journey/updateCardDataByShare' , array); return data; } // fail: err => { // console.error(err); // } }); }); } }, |
this.cardDataList是我的卡片组,如果直接map来调用drawShareCanvas函数(内部的wx.canvasToTempFilePath),只会绘制第一张卡片,所以我不得不将它改为Promise.resolve()的异步调用形式来遍历数据,而且内部加了一个setTimeout来给生成图片时间,这样对开发不太友好