评论

分享个“系统”报错捕获的方法

恭喜发财,大吉大利。

我在实现一个需求:播放视频广告,如果播放失败,就算了直接发放奖励。
正常的操作应该监听onError方法,如果获取广告失败了,我通过业务手段知道也是可以的。
但是我图偷懒,在调用RewardedVideoAd.show()时,如果发生错误会报{errMsg: "no advertisement data available, please invoke load()"}
那么我直接在调用RewardedVideoAd.show()用try包裹不就好了吗?
以下是实测代码

adPlay() {
    // 播放广告
    try { // 播放失败就不播了
        rewardedVideoAd.show()
        return;
    } catch (error) {
        console.error('广告播放失败', error)
    }
    // 发放奖励
    this.postAward()
}

然而实际情况是,系统在报了

Unhandled promise rejection {errMsg: "no advertisement data available, please invoke load()"}

就没有然后了,甚至不会走到conposer.error
解决方案是加上async/await操作后就可以解决了,解决代码如下

async adPlay() {
    // 播放广告
    try { // 播放失败就不播了
        await rewardedVideoAd.show() // 注意:这里必须加await 否则报错是系统级别的 不会被try捕获
        return;
    } catch (error) {
        console.error('广告播放失败', error)
    }
    // 发放奖励
    this.postAward()
}

猜测是因为RewardedVideoAd.show()调用了“系统原生”方法,返回的Promise类如果没被正确处理,将会终止操作。

最后一次编辑于  2022-06-03  
点赞 0
收藏
评论
登录 后发表内容