繁体   English   中英

如果从类中执行 clearInterval 和 resolve() 不起作用

[英]clearInterval and resolve() not working if executed from class

我的课:

var indexedDBInitInterval; // clearInterval Doesnt work when done from within class for some reason..
var coumter  = 1;

class IndexedDBWrapper {
  constructor() {
    this._db = undefined
    this._dbInitInterval = undefined
    this.dbInitRequest = indexedDB.open("someDB", 1)
    this.dbInitRequest.onerror = (event) => { this.dbInitRequestOnError(event) }
    this.dbInitRequest.onsuccess = (event) => { this.dbInitRequestOnSuccess(event) }
    this.dbInitRequest.onupgradeneeded = (event) => { this.dbInitRequestOnUpgradedeNeeded(event) }
  }

  isDBInitalized() {
    return new Promise((resolve) => {
      indexedDBInitInterval = setInterval(() => {
        log(this.dbInitRequest)
        log(this.dbInitRequest.readyState)
        log(indexedDBInitInterval)
        coumter = coumter + 1
        if (this.dbInitRequest.readyState == "done") {
          log("mutants")
          log(coumter)
          log(clearInterval(indexedDBInitInterval))
          resolve()
        }
      }, 300)
    })
  }

  dbInitRequestOnError(event) {
    log("Error initializing IndexedDB: ")
    log(event)
  }

并调用:

indexedDBWrapper.isDBInitalized().then(() => {

clearInterval 或 resolve 都不会被触发,即使log("mutants")被触发。

多么拼图啊。。

你会想使indexedDBInitInterval内的变量isDBInitialized 否则,如果您多次(甚至在多个对象上)调用该函数,它们会相互干扰。 对于coumter也可以这样说,尽管这可能只是一个调试变量。

indexedDBWrapper.isDBInitalized().then(() => console.log('OK'))打印OK吗? 如果使用了错误的indexedDBInitInterval ,我可以理解clearInterval失败,但是记录的mutants应该表明resolve()也被调用,除非两者之间发生错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM