前端直接调用外部 js 的方法时,如果外部的js对象还未注册会导致方法调用失败,出现异常。以下代码是常用的封装方法,当调用异常时会开启定时器,监控到实例存在,继续调用方法。
export default {
_getAObject() {
return new Promise((resolve, reject) => {
if (window.__A__) {
resolve(window.__A__)
} else {
let count = 0
const ivl = setInterval(() => {
count++
if (window.__A__) {
clearInterval(ivl)
resolve(window.__A__)
} else {
// 检测 8s 以后还没有 放弃
if (count > 80) {
clearInterval(ivl)
reject(new Error('A check over 8s'))
}
}
}, 100)
}
})
},
AAA() {
try {
if (window.__A__) window.__A__.error(error, pid)
else
this._getAObject()
.then(__A__ => {
__A__.AAA(error, pid)
})
.catch(e => {
console.error('__A__.error', e)
})
} catch (e) {
console.error('window.__A__.error', e)
}
}
}