Promise chain

by Artem

JavaScript

'use strict';

const httpRequest = params => new Promise((resolve, reject) => {
  jQuery.getJSON('https://jsonplaceholder.typicode.com/posts/1')
    .done(data => {
      resolve(data);
    })
    .error(err => {
      reject(data);
    });
});


const checkFirstTable = () => {
  // 
  const params = {};
  return httpRequest(params);
};

const checkSecondTable = () => new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, 2); // num
});

const getFirstTableData = () => new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'table data1'); // table data
});

const getSecondTableData = () => new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'table data2'); // table data
});

const checkTableCondition = tableData => {
  if (tableData === 'table data1') return handleData1;
  if (tableData === 'table data2') return handleData2;
};


const handleData1 = d => {
  console.log('handleData1 ', d);
};
const handleData2 = d => {
  console.log('handleData2 ', d);
};

const getSecondTableDataPromise = () => checkSecondTable().then(num => {
  if (num > 0) {
    return getSecondTableData();
  }
});



checkFirstTable()
  .then(num => {
    if (num > 0) {
      return getFirstTableData();
    } else if (num === 0) {
      return getSecondTableDataPromise();
    }
  })
  .then((tableData, _ = checkTableCondition(tableData)) => {
    _(tableData);
  });