添加对象或编辑(如果存在)(indexeddb)

add an object or edit if exist (indexeddb)

我有这段代码,我可以添加或编辑对象(如果存在),但是 "for" 在调用函数 onsuccess 之前完成,那么索引 "for" 是错误的。

如何传递索引onSuccess?

求助!!!

var active = dataBase.result;
var data = "";
var object = "";
var index = null;
var request;
$(".layers").promise().done(function () {
    var elements = document.getElementsByClassName('layers');
     for (var i = 0; typeof (elements[i]) != 'undefined'; i++) {
        if (elements[i].getAttribute("src").split("/")[4] !== "alpha.png") {
        data = active.transaction([elements[i].getAttribute("src").split("/")[3]], "readwrite");
        object = data.objectStore(elements[i].getAttribute("src").split("/")[3]);
        index = object.index("by_Name");
        request = index.get(String(elements[i].getAttribute("src").split("/")[4] + "/" + elements[i].getAttribute("src").split("/")[6]));

        request.onsuccess = function (e) {
            var result = e.target.result;
            if (result === undefined) {
                var resultPut = object.put({
                    Name: String(elements[i].getAttribute("src").split("/")[4] + "/" + elements[i].getAttribute("src").split("/")[6]),
                    Count: 1,
                    Type: String(elements[i].getAttribute("src").split("/")[4])
                });
                resultPut.onerror = function (e) {
                    alert(resultPut.error.name + '\n\n' + resultPut.error.message);
                };
            } else {
                result.Count++;
                var requestUpdate = object.put(result);
                requestUpdate.onerror = function (event) {
                    alert(requestUpdate.error.name + '\n\n' + requestUpdate.error.message);
                };
            }
        }(event);
        }
    }
    alert("Finish");
})

问题是,当 for 结束时,与对象存储的事务还没有结束。您可以尝试像这样封装索引:

for(var i = 0; i < elements.length; i++) {
    (function(myElement) {
        if (myElement.getAttribute("src").split("/")[4] !== "alpha.png") {
        ...
        }
    })(elements[i]);
}