То, что я хочу сделать, это:
Цикл по коллекции данных, для каждого элемента данных сделать вызов API, подождать, пока обещание не выполнится или решить, приостановить на 30 секунд ... затемсделайте это снова для следующего элемента данных, пока в коллекции не будет ничего итеративного ... наконец, покажите сообщение «готово».
Пока это код, который я написал, собирая идеи в других вопросах SOи это не работает так, как мне хотелось бы.
populateDB();
// these 2 helper functions were found on SO
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep(fn, ...args) {
await timeout(30000);
return fn(...args);
}
// this is the main function that makes the api calls
function populateDB() {
for (let stock of universe.universe) {
sleep(() => {
// actual API call
return alpha.data
.daily(stock)
.then(data => {
// write data to the db when promise resolves
db.get("stocks")
.push({ [stock]: polishData(data) })
.write();
})
.catch(err => console.log(err));
});
}
console.log("Done!");
}
Все обещанные по-прежнему цепляются одна за другой, паузы нет.Я не думаю, что понимаю обещания достаточно, чтобы отладить это ... какой код будет работать так, как я хотел бы?