全局注册方法的常用封装

53 阅读1分钟

前端直接调用外部 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)
        }
   }
}