Я уже давно использую обещания + асинхронность / ожидание, я думаю, что мне было удобно с ними, но эта ситуация действительно ставит меня в тупик.Будем очень благодарны за любые советы / рекомендации!
Контекст: мое приложение выполняет запросы URI, но мне приходится откладывать каждый запрос на пару секунд.Чтобы сделать задержку более точной, я настроил очередь на выполнение запросов.Нет проблем с использованием обратных вызовов, но я занимался этим некоторое время, и я не могу понять, как справиться с ним с помощью обещаний.
const queue = []
let t;
function addToQueue(params, cb) {
queue.push({params,cb})
_run()
}
function _run() {
if (!t && queue.length) {
const {params,cb} = queue.shift()
_dummyFetch(params).then( data => cb(data) )
_startTimer()
}
}
function _startTimer() {
t = setTimeout( _endTimer, 2000 )
}
function _endTimer() {
t = null
_run()
}
async function _dummyFetch() {}
Отладка в песочнице:
function seconds() { return Math.round(new Date().getTime()/1000) }
function log(t) { console.log(t + " " + seconds()) }
function logFn(t) { return () => log(t) }
log("init")
addToQueue({}, logFn("request 1")) // should be close/same as init time
addToQueue({}, logFn("request 2"))
addToQueue({}, logFn("request 3"))
// If I could figure out how to make it a promise:
// addToQueue( ... ).then( data => ... )