Guest User

Untitled

a guest
Jun 25th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. // Написать класс, который
  2. // a) позволяет добавлять промис в массив
  3. // b) вызывать промисы из массива в порядке очереди, ожидая resolve от
  4. // каждого и выводя его ответ (через console.log), с минимальной задержкой между вызовами в 3 секунды
  5. // Проверки (в том числе на catch) делать не нужно
  6.  
  7. // Пример использования класса X:
  8. // ```
  9. // const x = new X();
  10. // const p1 = new Promise(res => setTimeout(() => res('r1'), 1000));
  11. // const p2 = new Promise(res => setTimeout(() => res('r2'), 5000));
  12. // const p3 = new Promise(res => setTimeout(() => res('r3'), 0));
  13. // x.push(p1);
  14. // x.push(p2);
  15. // x.push(p3);
  16. // ```
  17. // Код должен вывести `r1` через одну секунду, затем `r2` через 4 секунды, затем `r3` через 3 секунды.
  18.  
  19. class X {
  20. constructor() {
  21. this.promises = [];
  22. this.resolvingNow = false;
  23. this.pending = null;
  24. this.delay = 0;
  25. }
  26.  
  27. resolve() {
  28. if (!this.resolvingNow) {
  29. this.resolvingNow = true;
  30. const delayPromise = new Promise(res => setTimeout(res, this.delay));
  31.  
  32. this.pending = Promise.all([this.promises.shift(), delayPromise]).then(data => {
  33. console.log(data[0]);
  34. });
  35.  
  36. this.pending.then(() => {
  37. this.resolvingNow = false;
  38. this.delay = this.promises.length ? 3000 : 0;
  39. if (this.promises.length) {
  40. this.resolve();
  41. }
  42. });
  43. }
  44. }
  45.  
  46. push(promise) {
  47. this.promises.push(promise);
  48. Promise.resolve(promise);
  49. this.resolve();
  50. }
  51. }
  52.  
  53. const x = new X();
  54. const p1 = new Promise(res => setTimeout(() => res('r1'), 1000));
  55. const p2 = new Promise(res => setTimeout(() => res('r2'), 5000));
  56. const p3 = new Promise(res => setTimeout(() => res('r3'), 0));
  57. x.push(p1);
  58. x.push(p2);
  59. x.push(p3);
Add Comment
Please, Sign In to add comment