小程序
小游戏
企业微信
微信支付
扫描小程序码分享
wx.canvasToTempFilePath 这个API假如我有N张卡片,需要生成绘制N张CANVAS图,生成N张对应的分享图片,调用这个API就会有问题,只生成第一张图片,后面无法生成,还要预估给一个setTimeout延迟,让它绘制完成,能不能改良下这个API,增加一个异步的。
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
this
.cardDataList.reduce((curr, r1, k1, arr1) => {
return
curr.then(() => {
r1.trips.reduce((curr, r2, k2) => {
if
(r2.triptype ===
'flight'
) {
.drawShareCanvas(k1, k2, arr1);
}
});
}, Promise.resolve());
drawShareCanvas(idx1, idx2, array) {
......
new
Promise(resolve => {
setTimeout(() => {
resolve();
}, 500);
}).then(() => {
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: 216,
height: 174,
destWidth: 216 * 4,
destHeight: 174 * 4,
canvasId: aid,
success: res => {
data.sharePicurl = res.tempFilePath;
.$store.dispatch(
'journey/updateCardDataByShare'
, array);
data;
// fail: err => {
// console.error(err);
// }
},
this.cardDataList是我的卡片组,如果直接map来调用drawShareCanvas函数(内部的wx.canvasToTempFilePath),只会绘制第一张卡片,所以我不得不将它改为Promise.resolve()的异步调用形式来遍历数据,而且内部加了一个setTimeout来给生成图片时间,这样对开发不太友好
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题
我也遇到了这个问题,当用一个数组遍历之后再wx.canvasToTempFilePath,发现只能生成第一张临时文件,后面当文件都不生成
这个本身就是异步操作吧?回调接口都有了
data.map(r => {
wx.canvasToTempFilePath ()......
})
如果是遍历操作生成图片
只会生成第一张
请提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),请按照正确的指引来提供代码片段
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
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来给生成图片时间,这样对开发不太友好
麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题
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来给生成图片时间,这样对开发不太友好
我也遇到了这个问题,当用一个数组遍历之后再wx.canvasToTempFilePath,发现只能生成第一张临时文件,后面当文件都不生成
这个本身就是异步操作吧?回调接口都有了
data.map(r => {
wx.canvasToTempFilePath ()......
})
如果是遍历操作生成图片
只会生成第一张
请提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),请按照正确的指引来提供代码片段