массив собирается через раз nodejs

246
18 мая 2021, 09:30

Друзья привет у меня массивы в суммы собираются где одинаковые ключи, потмо выдаю два массива в куче, но вот проблема чтото один из массивов через раз пустой , в чем может быть проблема , в сортировке может или в сборке самой , второй массив который 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
    })
  }
});
}

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

Answer 1
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 });
});
READ ALSO
js Ввод с кнопки

js Ввод с кнопки

Происходит ввод данных в поле (input) и получение значения с кнопки "Жмакни меня":

119
Проблема с vue hover

Проблема с vue hover

Есть компонент на vue - мультиселектРешил изменить его кастомный значок - стрелку, через слоты

90
Вывод данных из хранилища Vuex в компонент Vue

Вывод данных из хранилища Vuex в компонент Vue

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

118