как упорядочить различные вызовы функций с обещаниями с очередью - PullRequest
2 голосов
/ 26 апреля 2019

У меня есть функция, которая возвращает обещание

function ajax() { sideeffect(); return new Promise() }

Я вызываю эту функцию в разное время, я хочу, чтобы эта функция ставила вызовы в очередь и запускалась только после разрешения предыдущего вызова.

Если я звоню ajax три раза подряд ajax(); ajax(); ajax(), я хочу, чтобы это было ajax.then(ajax).then(ajax), или если я звоню четыре раза, это цепочки соответственно.

1 Ответ

2 голосов
/ 26 апреля 2019

Создайте постоянную переменную, представляющую последнее созданное Обещание, добавьте к ней цепочку при вызове ajax, переназначьте постоянную переменную в новую цепочку и верните новую цепочку:

let lastProm = Promise.resolve();
function ajax(ms) {
  // sideeffect();
  lastProm = lastProm.then(() => (
    new Promise(resolve => setTimeout(resolve, ms))
  ));
  return lastProm;
}

ajax(1000).then(() => console.log('resolved 1'));
ajax(1000).then(() => console.log('resolved 2'));
ajax(3000).then(() => console.log('resolved 3'));
ajax(1000).then(() => console.log('resolved 4'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...