Не могу разобраться, как заставить исполняться транзакцию каждый раз в цикле, а не только последний. Код специально упростил. Получается что uid генерится новый и попадает в Insert, a i всегда принимает значение последнего.
var db = openDatabase("testdb", "1.0", "Web SQL Storage", 1 * 1024 * 1024);
db.transaction(
function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS test (id TEXT NOT NULL PRIMARY KEY," + "idx INTEGER)", [], null, null);
});
var a = 10;
var i = 0;
while (i < a) {
function uid() {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
db.transaction(
function(tx) {
tx.executeSql("INSERT INTO test(id, idx) VALUES (?, ?)", [uid(), i], null, null);
console.log(i);
}
);
i++;
}
UPD: Проблема с i была вызвана замыканием. Решается еще одним замыканием. Создаем ее копию в локальной области видимости на каждом шаге цикла. Но задачу усложняем. Нам нужно пробежаться, допустим по всем элементам страницы и внести значения всех ссылок в бд.
var db = openDatabase("testdb", "1.0", "Web SQL Storage", 1*1024*1024);
db.transaction(
function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS test1 (id TEXT NOT NULL PRIMARY KEY, idx INTEGER, url TEXT)", [], null, null);
});
var i = 0;
var list = $('a[class*=js-gps-track]');
while (i < list.length){
a = list[i].href
function uid() {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
(function(i){
db.transaction(
function(tx){
tx.executeSql("INSERT INTO test1(id, idx, url) VALUES (?, ?, ?)", [uid(), i, a], null, null);
console.log(i);
}
);
})(i);
i++;
}
Теперь у нас и i и uid уникальные для каждой записи. Но ссылка всегда одна... К сожалению, именно эту задачу мне и предстоит решить, поэтому и обращаюсь за помощью.
tx.executeSql("INSERT INTO test1(id, idx, url) VALUES (?, ?, ?)", [uid(), i, list[i].href], null, null);
Если так, то все работает верно... Чтобы в итоге все заработало, нужно объявлять a, через let:
let a = list[i].href
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть дата в iso формате 2019-08-04T23:01:02447Z Как написать регуляное выражение для удаления миллисекунд, что бы получилась строка такого типа...
Помогите решить проблему работы js на iphone - бьюсь третий день, никак не пойму как решитьСайт: https://ugli33
Знаю что ключевое слово this, если функция является конструктором используется для того чтобы можно было обратиться к новосозданному объекту,...