如果断点在其分配上触发,则不会触发 IndexedDB 回调



检查此片段:

function connect() {
    var request = window.indexedDB.open('test', 1);
    request.onerror = function(event) {
      console.log('error');
    };
    request.onupgradeneeded = function (event) {
      console.log('upgrade needed');
    };
    request.onsuccess = function(event) {
      console.log('success');
    };
}
connect();

当我将断点放在回调分配行(4、8、12)上并在Chrome调试器中运行时,内部回调的代码将永远不会发射。相反,此代码可以正常工作:

  function connect2() {
    var IDB = {
      open: function() {
        var req = {};
        setTimeout(() => {
          req.onsuccess();
        }, 0)
        return req;
      }
    }
    var request = IDB.open();
    request.onsuccess = function(event) {
        console.log('onsuccess2');
    };
  }
  connect2();

我是否正确理解,indexeddb.open和debugger的情况会破坏JS事件循环?这样做的原因是什么?

它对我有用!on success和Onupgradeneed被称为!见小提琴:

function connect() {
    var request = window.indexedDB.open('test', 1);
    request.onerror = function(event) {
      console.log('error');
    };
    request.onupgradeneeded = function (event) {
      console.log('upgrade needed');
    };
    request.onsuccess = function(event) {
      console.log('success');
    };
}
connect();

如果要使用更多模块化:

var APP = APP || {};
APP.Database = (function(){
	
  return {
      request : null,
      init : function()
      {
          this.connect();
          this.request.onerror = this.logError;
          this.request.onupgradeneeded = this.onUpgradedNeeded;
          this.request.onsuccess = this.onSuccessCallback;
      },
      connect : function()
      {
        this.request = window.indexedDB.open('test', 1);
      },
      onSuccessCallback : function(evt)
      {
        console.log('Successfully conneted!');
      },
      logError : function(evt)
      {
        console.log('error');
      },
      onUpgradedNeeded : function(evt)
      {
         console.log('upgrade needed');
      }
    };  
})();
APP.Database.init();

最新更新