Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Написать класс, который
- // a) позволяет добавлять промис в массив
- // b) вызывать промисы из массива в порядке очереди, ожидая resolve от
- // каждого и выводя его ответ (через console.log), с минимальной задержкой между вызовами в 3 секунды
- // Проверки (в том числе на catch) делать не нужно
- // Пример использования класса X:
- // ```
- // const x = new X();
- // const p1 = new Promise(res => setTimeout(() => res('r1'), 1000));
- // const p2 = new Promise(res => setTimeout(() => res('r2'), 5000));
- // const p3 = new Promise(res => setTimeout(() => res('r3'), 0));
- // x.push(p1);
- // x.push(p2);
- // x.push(p3);
- // ```
- // Код должен вывести `r1` через одну секунду, затем `r2` через 4 секунды, затем `r3` через 3 секунды.
- class X {
- constructor() {
- this.promises = [];
- this.resolvingNow = false;
- this.pending = null;
- this.delay = 0;
- }
- resolve() {
- if (!this.resolvingNow) {
- this.resolvingNow = true;
- const delayPromise = new Promise(res => setTimeout(res, this.delay));
- this.pending = Promise.all([this.promises.shift(), delayPromise]).then(data => {
- console.log(data[0]);
- });
- this.pending.then(() => {
- this.resolvingNow = false;
- this.delay = this.promises.length ? 3000 : 0;
- if (this.promises.length) {
- this.resolve();
- }
- });
- }
- }
- push(promise) {
- this.promises.push(promise);
- Promise.resolve(promise);
- this.resolve();
- }
- }
- const x = new X();
- const p1 = new Promise(res => setTimeout(() => res('r1'), 1000));
- const p2 = new Promise(res => setTimeout(() => res('r2'), 5000));
- const p3 = new Promise(res => setTimeout(() => res('r3'), 0));
- x.push(p1);
- x.push(p2);
- x.push(p3);
Add Comment
Please, Sign In to add comment