reconnection scipr

by Vladymyr Shevchuk

JavaScript

function connectToSocket() {
    return new Promise((resolve, reject) => {
      const randomizer = Math.round(Math.random());

      if (randomizer) {
        console.error('connection error');
        return reject();
      } else {
        console.error('success connection');
        return resolve();
      }
    });
  }

  function tryReconnect() {
    const attemptCount = [1, 2, 3, 4];

    let timer = 1000;

    attemptCount.reduce(
      (p, i) => p.then(
        () => new Promise(
          (resolve, reject) => {
            timer *= i;

            setTimeout(() => {
              console.error(`attempt: ${i}, timer: ${timer}s`);

              return connectToSocket().then(
                () => {
                  console.error('don\'t continue connect');
                  return reject();
                },
                () => {
                  console.error('try reconnect');
                  return resolve();
                }
              );
            }, timer);
          }
        )
      ),
      Promise.resolve()
    );
  }