我找不到适合该问题的任何解决方案,所以我在这里问。 我正在与indexedDB无关,只是为了更好地理解而提到它。我有一个函数告诉我对象是否已存储在indexedDB中。如果是这样,将返回该对象的版本,否则返回值-1。
Javascript函数如下所示:
function dbGameVersion (key) {
var transaction = db.transaction(["file"]);
var objectStore = transaction.objectStore("file");
var request = objectStore.get(key);
var version = 0;
// Triggered by objectStore.get(key);
request.onsuccess = function(event) {
if(request.result) {
// Return stored game version
version = request.result.file.game[0].version;
} else {
// Game not yet in DB
version = -1;
}
};
return version;
}
该代码通常可以正常工作,所以问题是:如何将onsuccess事件中的版本值传递回dbGameVersion函数,因此dbGameVersion函数将版本值返回到调用它的位置?
我知道“ var version = 0; ... return version;”由于onsuccess事件是独立且异步的,因此无法正常工作。我刚刚添加了它,以更好地理解我想要的东西。
那么正式/正确的解决方案是什么
答案 0 :(得分:1)
您不能返回版本值,但可以返回它的承诺:
function dbGameVersion (key) {
var transaction = db.transaction(["file"]);
var objectStore = transaction.objectStore("file");
var version = 0;
return new Promise(function(resolve) {
var request = objectStore.get(key);
request.onsuccess = function(event) {
if(request.result) {
// Return stored game version
version = request.result.file.game[0].version;
} else {
// Game not yet in DB
version = -1;
}
resolve(version);
};
});
}
// And you can then use this function like below:
dbGameVersion(key).then(function(version) {
// You get the version value here:
console.log(version);
});