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

时间:2015-04-15 04:06:26

标签: javascript indexeddb

我有这个代码,我可以添加或编辑对象(如果存在),但是在调用onsuccess函数之前“for”完成,那么索引“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");
})

1 个答案:

答案 0 :(得分:0)

事情是,在for结束时,与对象存储的事务不是。您可以尝试的是封装索引,如下所示:

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