哪位高手救小弟一命,帮我看看drawFn()函数里 promise返回值怎么取不到呢?这是按钮点击时执行的代码,去调用 drawFn()。但在 drawFn().then 里,没法打印 “====压缩完后图片地址”。 有点特别的是drawFn()函数执行时调用了自己。
licence_pic_get(event) {
//从本地选多张图片
wx.chooseImage({
count: 9,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: res => {
this.pageData.tempFilePath = res.tempFilePaths;
this.pageData.compress_tempFilePath = [];
this.pageData.index = 0;
//调用函数,这里没能进入then打印结果,是为什么呢?
this.drawFn().then(res_drawFn => {
console.log('====压缩完后图片地址:', res_drawFn)
})
}
})
},
/////////////////
下面是调用的函数:
drawFn: function () {
let _this = this;
return new Promise((resolve, reject) => {
console.log('第' + _this.pageData.index + '次调用函数');
if (_this.pageData.index < _this.pageData.tempFilePath.length) {
ctx.drawImage(_this.pageData.tempFilePath[_this.pageData.index], 0, 0, 100, 100);
ctx.draw(false, () => {
console.log('第' + _this.pageData.index + '次draw');
wx.canvasToTempFilePath({
width: 100,
height: 100,
destWidth: 100,
destHeight: 100,
canvasId: 'compress',
success: res_compress => {
console.log('第' + _this.pageData.index + '次循环tempFilePath:', res_compress.tempFilePath);
_this.pageData.compress_tempFilePath.push(res_compress.tempFilePath);
_this.pageData.index++;
_this.drawFn(); //调用自己
}
})
})
}
else {
console.log('调用完成compress_tempFilePath:', _this.pageData.compress_tempFilePath);
resolve({
compress_tempFilePath: _this.pageData.compress_tempFilePath,
});
}
}) //promise end
},
/////////////////
下面是打印结果:
没执行: this.drawFn().then(res_drawFn => {
console.log('====压缩完后图片地址:', res_drawFn)
})
我遇到过你这个问题:
this.drawFn().then(res_drawFn => { console.log('====压缩完后图片地址:', res_drawFn) })
前两次调用drawFn时候,你的函数不会返回一个promise对象,而是继续调用了自己,这个时候,你return的promise对象是新的promise对象了。所以就不会被你最上面初始调用时候的then捕获。
你可以做个实验,把drawFn()里面改一改,让他不自己调用自己,直接resolve一个值,上面的then就会正常捕获。
总结一下就是你这个自己调用的自己的操作有问题。
你那个调用自己的地方有问题,假如第一次符合if条件,你会一直处于pendding状态,出不来,所以什么也打印不出来(因为then没执行),
可以在调用自己的地方加以下代码试试
_this.drawFn().then(res => resolve());