前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js中如果遇到低版本安卓设备调用setTimeout不生效解决办法

js中如果遇到低版本安卓设备调用setTimeout不生效解决办法

作者头像
蓓蕾心晴
发布2020-03-02 11:09:21
1.5K0
发布2020-03-02 11:09:21
举报
文章被收录于专栏:前端小叙

工作中会遇到低版本安卓设备调用setTimeout不生效,既不会报错,里面的函数也不会执行,这里po一个解决办法,如果不执行则执行安卓自己封装的原生的setTimeout方法:sdk.setTimeout。

注明:此方法为我们老大所写,放在这里惠存一下。

代码语言:javascript
复制
基本方案
/*******/
(function(window){
    Promise.race([
        new Promise((resolve)=>{
            window.setTimeout(()=>{
                resolve(window.setTimeout)
            },0)
        }),
        new Promise((resolve)=>{
            sdk.setTimeout(()=>{
                resolve(sdk.setTimeout.bind(sdk))
            },100)
        })
    ]).then((fn)=>{
        window.setTimeout = fn
    })
})(window)


window.setTimeout(()=>{
    cosole.log('hello world')
},1000)








进阶方案
/*******/

(function(window){
    const st = window.setTimeout.bind(window)
    let callList = []
    window.setTimeout = function(cb, duration){
        callList.push(cb)
        return st(cb, duration)
    }
    Promise.race([
        new Promise((resolve)=>{
            window.setTimeout(()=>{
                resolve(()=>{
                    return st
                })
            },0)
        }),
        new Promise((resolve)=>{
            sdk.setTimeout(()=>{
                resolve(()=>{
                    callList.forEach(fn=>{
                        sdk.setTimeout(fn, duration)
                    })
                    window.clearTimeout = sdk.clearTimeout.bind(sdk)
                    return sdk.setTimeout.bind(sdk)
                })
            },100)
        })
    ]).then((fn)=>{
        window.setTimeout = fn()
    })
})(window)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档