0

Друзья привет у меня массивы в суммы собираются где одинаковые ключи, потмо выдаю два массива в куче, но вот проблема чтото один из массивов через раз пустой , в чем может быть проблема , в сортировке может или в сборке самой , второй массив который sell отображается идеально без косяков, а первый через раз пустой

попытаюсь разьяснить код

//это пришел запрос с двумя параметрами

app.get('/order-book', (request, response) => {

  //это те параметры

  const c_currency = request.query.c_currency;
  const currency = request.query.currency;

  //тут я делаю выбор ордеров с типом 1

  const orderbookbuy = 'SELECT btc,btc_price FROM orders WHERE c_currency = ? AND currency = ? AND order_type = 1 ORDER BY btc_price DESC';

  //тут я делаю выбор ордеров с типом 2

  const orderbooksell = 'SELECT btc,btc_price FROM orders WHERE c_currency = ? AND currency = ? AND order_type = 2 ORDER BY btc_price ASC';

  //отправляю первый запрос

  var ordersbuy = {};
  pool.query(orderbookbuy, [c_currency, currency], function(error, result, fields) {
    if (error) throw error;

    //полученый ответ передаю в функцию

    ordersbuy = result;
    myFunctionbuy(ordersbuy);
  });

  //тут функция собирает массивы с одинаковым btc_price в один и выдает суммы btc_price и btc тобишь количество

  function myFunctionbuy(ordersbuy) {
    const arr = ordersbuy;
    const imm1 = {};
    arr.forEach(item => {
      if (!imm1[item.btc_price]) {
        imm1[item.btc_price] = item.btc;


      } else {
        imm1[item.btc_price] += item.btc;


      }
    });

    const resultbuy = Object.keys(imm1).map(key => {
      const obj = {
        price: +key,
        order_amount: imm1[key]
      }
      return obj;

    })
    ressbuy = resultbuy;



  }

  //тут второй массив который работает замечательно никаких косяков , они оба олдинаковые и потмо в итоге я их выдаю в одном многомерном массиве

  var orderssell = {};
  pool.query(orderbooksell, [c_currency, currency], function(error, result, fields) {
    if (error) throw error;

    orderssell = result;
    myFunctionsell(orderssell);
  });

  function myFunctionsell(orderssell) {
    const arr = orderssell;
    const imm = {};
    arr.forEach(item => {
      if (!imm[item.btc_price]) {
        imm[item.btc_price] = item.btc;


      } else {
        imm[item.btc_price] += item.btc;


      }
    });

    const resultsell = Object.keys(imm).map(key => {
      const obj = {
        price: +key,
        order_amount: imm[key]
      }
      return obj;

    })
    resssell = resultsell;

    //тут я их обоих передаю в функцию чтобы выдать через express 

    sumBuy(ressbuy, resssell);

  }

  function sumBuy(ressbuy, resssell) {

    response.send({
      bid: ressbuy,
      ask: resssell
    })
  }
});

}

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

  • или может я код нагромоздил сильно, и он просто неправильный, подскажите плиз – nik black Aug 07 '19 at 04:46
  • Может, вы хотя бы в коде отступы правильные поставите? Невозможно код читать. И поясните, что такое один из массивов через раз пустой - какая переменая? – Stepan Kasyanenko Aug 07 '19 at 04:54
  • function myFunctionbuy(ordersbuy){ const arr = ordersbuy; const imm1= {}; arr.forEach(item => { if (!imm1[item.btc_price]){ imm1[item.btc_price] = item.btc;

    } else { imm1[item.btc_price] += item.btc;

    } } );

    const resultbuy = Object.keys(imm1).map(key => { const obj ={ price: +key, order_amount: imm1[key] } return obj;

    }) ressbuy = resultbuy;

    – nik black Aug 07 '19 at 05:04
  • Вот вам самому удобно читать код в комментарии, без пояснений и форматирования? Пожалуйста, исправьте вопрос, добавив всю необходимую информацию в вопрос. Под вопросом есть кнопка править – Stepan Kasyanenko Aug 07 '19 at 05:06
  • Вставляете код в снипет: кнопка <> или сочетание клавиш Ctrl+M, слева кнопка Привести в порядок. Орфографию и пунктуацию, к сожалению, не исправляет. –  Aug 07 '19 at 05:25
  • Почитайте вот это https://ru.stackoverflow.com/questions/554290/%d0%9a%d0%b0%d0%ba-%d0%b2%d0%b5%d1%80%d0%bd%d1%83%d1%82%d1%8c-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8%d0%b7-%d1%81%d0%be%d0%b1%d1%8b%d1%82%d0%b8%d1%8f-%d0%b8%d0%bb%d0%b8-%d0%b8%d0%b7-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8-%d0%be%d0%b1%d1%80%d0%b0%d1%82%d0%bd%d0%be%d0%b3%d0%be-%d0%b2%d1%8b%d0%b7%d0%be%d0%b2%d0%b0-%d0%98%d0%bb%d0%b8-%d1%85%d0%be%d1%82%d1%8f-%d0%b1%d1%8b-%d0%b4%d0%be%d0%b6 – Stepan Kasyanenko Aug 07 '19 at 09:30

1 Answers1

0
function pquery(sql, params) {
  return new Promise((resolve, reject) => {
    pool.query(sql, params, (error, result) => {
      if (error) {
        return reject(error);
      }
      resolve(result);
    });
  });
}

function myFunction(ordersbuy) {
  const imm1 = {};
  for (const { btc_price, btc } of ordersbuy) {
    if (!imm[btc_price]) {
      imm[btc_price] = btc;
    } else {
      imm[btc_price] += btc;
    }
  }

  const result = Object.keys(imm1).map(key => ({
    price: +key,
    order_amount: imm1[key]
  }));
  return result;
}

app.get('/order-book', async (request, response) => {
  // это те параметры

  const { c_currency } = request.query;
  const { currency } = request.query;

  // тут я делаю выбор ордеров с типом 1

  const order = 'SELECT btc,btc_price FROM orders WHERE c_currency = ? AND currency = ? AND order_type = ? ORDER BY btc_price';
  const orderbookbuy = `${order} DESC`;
  const orderbooksell = `${order} ASC`;

  // отправляю первый запрос

  const ordersbuy = await pquery(orderbookbuy, [c_currency, currency, 1]);
  const bid = myFunction(ordersbuy);

  const orderssell = await pquery(orderbooksell, [c_currency, currency, 2]);
  const ask = myFunction(orderssell);

  response.send({ bid, ask });
});

Shiki
  • 574