作業中會遇到低版本安卓設備呼叫setTimeout不生效,既不會報錯,里面的函式也不會執行,這里po一個解決辦法,如果不執行則執行安卓自己封裝的原生的setTimeout方法:sdk.setTimeout,
注明:此方法為我們老大所寫,放在這里惠存一下,
基本方案
/*******/ (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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/146961.html
標籤:JavaScript
上一篇:00.ES6簡介
