Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

public showVideo(options:object, cb: (retCode: ADRetcode, retErr: string) => void) {
    Logger.debug('创建激励视频广告')
    videoAd = this.app.createRewardedVideoAd(options)
    videoAd.load()
        .then(() => {
            videoAd.show()
                .then(() =>  Logger.debug('激励视频显示成功'))
                .catch(err => {
                    Logger.error('激励视频显示失败: ' + JSON.stringify(err))
                    // 显示失败回调
                    Utils.call_once(cb, ADRetcode.Error, '激励视频显示失败:' + JSON.stringify(err))
                }
            )
        })
        .catch(err => {
            Logger.error('激励视频加载失败: ' + JSON.stringify(err))
            // 加载失败回调
            Utils.call_once(cb, ADRetcode.Error, '激励视频加载失败:' + JSON.stringify(err))
        }
    )
    // 错误监听
    let onVideoAdError = function(err) {
        Logger.error('[WXSDK] 激励视频出现异常: ' + JSON.stringify(err))
        // 出错的同时移除事件监听,防止重复触发
        removeAllListener()
        // 异常回调
        Logger.debug('[WXSDK] onVideoAdError======>cb:', cb, cb['isDeleted'], typeof cb)
        Utils.call_once(cb, ADRetcode.Error, '激励视频出现异常: ' + JSON.stringify(err))
    }
    videoAd.onError(onVideoAdError)
}
/**
     * 执行即销毁的函数
     * @param func 
     * @param args 
     */
    static call_once(func, ...args) {
        func && func(...args)
        Logger.debug('回调函数调用时间:' + new Date().getTime())
        func = null
    }

最近在学习公司的代码,按照代码在激励视频创建成功或者失败都会调用回调函数,调用回调函数使通过call_once()来执行的,在执行完过后将回调函数设为null,避免回调的重复执行。
但是最近发现在创建激励视频失败时先在onError()中执行回调函数,然后又在load().catch()中再次执行,但是回调函数应该在第一次调用之后就变成了null才对,而且似乎也不能才call_once()中将cb重写。
请问各位大佬这是什么原因?是因为回调函数还有其他的引用吗?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
314 views
Welcome To Ask or Share your Answers For Others

1 Answer

函数参数只是创建了一个新的引用,修改这个引用的指向不会影响到原来的对象,类似于:

call_once(func, ...args){
    var func = func;
    func && func(...args);
    Logger.debug('回调函数调用时间:' + new Date().getTime());
    func = null;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...