我需要使用Dexie迭代IndexedDB表,并使用某些功能处理每个项目。
我的代码是这样的:
let accountCode = {a: 1, b: 2};
let array = [1, 2, 3, 4];
let output = {};
for (let key of array) {
output[key] = accountCode;
}
// Almost forgot this
this.setState(output);
我需要在每次迭代之间设置一个超时时间,以便通过超时显示每个下一个项目。
答案 0 :(得分:0)
类似的事情可能对您有用。
下面的iterateWithDelay
函数可用于您要迭代一系列项目的任何其他情况。我也像.map()
一样使它传递了索引和数组。 (如果回调函数返回某个值,例如false
等,您还可以添加功能来停止迭代)
干编码,YMMV等:)
const iterateWithDelay = (items, delay, callback) =>
new Promise(resolve => {
let index = 0;
const tick = () => {
const item = items[index];
if (!item) {
resolve();
return;
}
callback(item, index, items);
index++;
setTimeout(tick, delay);
};
tick();
});
var db = new Dexie(dbName);
db.version(dbVersion).stores({ smthtbl: "++id, data, creationTime" });
db.smthtbl
.toArray(items => iterateWithDelay(items, 100, proccessItem))
.then(() => {
console.log("done");
return "done";
});
function proccessItem(item) {
console.log(item.id + " : " + item.data);
}