Что-то вроде этого может работать для вас.
Функция 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);
}