将参数传递给indexeddb中的异步请求

时间:2014-04-23 16:27:42

标签: promise indexeddb

我有下一个代码:

$.get('Lubricantes/getListaEquipos', function (data) {
        if (data.length > 0) {
            var peticion = base_datos_local.transaction(['Equipos'], 'readwrite').objectStore('Equipos').clear();

            total_equipos = data.length;

            peticion.onerror = function () {
                console.log('No se pudo limpiar el maestro de equipos.');
            };
            peticion.onsuccess = function (e) {
                for (var i = 0; i < data.length; i++) {
                    var peticion = base_datos_local.transaction(['Equipos'], 'readwrite').objectStore('Equipos').add(data[i]);
                    peticion.onerror = function (e) {
                        console.log('No se pudo cargar el equipo' + i);
                    };
                    peticion.onsuccess = function (e) {
                        console.log('Equipo ' + i + ' agregado');
                    };
                }
            };                                
        }
    });

当执行var i时不存在,如何传递给i方法添加i的值?

1 个答案:

答案 0 :(得分:2)

异步很有趣,不是吗?

我将保存关于范围和变量引用的讲座,并建议您只需将for循环的内容包装到&#34;立即调用的匿名函数&#34;像这样:

    $.get('Lubricantes/getListaEquipos', function (data) {
        if (data.length > 0) {
            var peticion = base_datos_local.transaction(['Equipos'], 'readwrite').objectStore('Equipos').clear();

            total_equipos = data.length;

            peticion.onerror = function () {
                console.log('No se pudo limpiar el maestro de equipos.');
            };
            peticion.onsuccess = function (e) {
                for (var i = 0; i < data.length; i++) {
                    (function(entrada, j) {
                        var peticion = base_datos_local.transaction(['Equipos'], 'readwrite').objectStore('Equipos').add(entrada);
                        peticion.onerror = function (e) {
                            console.log('No se pudo cargar el equipo' + j);
                        };
                        peticion.onsuccess = function (e) {
                            console.log('Equipo ' + j + ' agregado');
                        };
                    })(data[i], i);
                }
            };                                
        }
    });
立即评估

data[i]并将其作为参数传递给此闭包,因此当回调最终触发时,您将在范围内具有正确的引用。