我有下一个代码:
$.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的值?
答案 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]
并将其作为参数传递给此闭包,因此当回调最终触发时,您将在范围内具有正确的引用。