如何从事件中获取返回值?

时间:2018-08-13 12:16:22

标签: javascript function events return-value

我找不到适合该问题的任何解决方案,所以我在这里问。 我正在与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事件是独立且异步的,因此无法正常工作。我刚刚添加了它,以更好地理解我想要的东西。

那么正式/正确的解决方案是什么

1 个答案:

答案 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);
});