函数未执行-IndexedDB,IONIC 2



简要说明:在下面的代码中,在ngOnInit()中,opn.success = function()在之后执行

console.log("此行首先执行"(;

然而,我们希望首先执行opn.onsuccess = function()

请帮忙

ngOnInit()
{
var opn = indexedDB.open("webDealer", this._globalvar.getvarDBVersion());
opn.onsuccess = function() {
var db = opn.result;
var transac = db.transaction(['usrprfl'], 'readonly');
var storeNm = transac.objectStore('usrprfl');
var countRequest = storeNm.count();
countRequest.onsuccess = function()
{
this.cnt = countRequest.result;
if(this.cnt == 1 )
{
storeNm.getAll().onsuccess = function(event)
{
var rslt = event.target.result;
this.usr = rslt[0].nm;
this.pwd = rslt[0].pw;
this.clicktyp ='AUTO';
};
}
else
{
this.clicktyp ='MANUAL';
}
};
db.close();
};
console.log("This line is executed first");
}
OnLogon()
{
//... mycode
}

对indexedDB.open的调用异步解析。如果希望该日志消息仅在数据库打开后显示,则需要等待数据库打开。现在您的代码不会等待。

以下是一些如何等待的示例代码:

function open(name, version) {
return new Promise((resolve, reject) => {
var request = indexedDB.open(name, version);
request.onsuccess = _ => resolve(request.result);
request.onerror = _ => reject(request.error);
});
}
async function ngOnInit() {
var db = await open('webDealer', this._globalvar.getvarDBVersion());
console.log("This line is no longer executed first");
}

最新更新