如何统计异步中interval1>interval2的次数

问题描述 投票:0回答:1

当interval1>interval2时,我将interval1的颜色更改为绿色!

illustration

我只想要一条消息,告诉我间隔 1 > 间隔 2 的数量。我不知道该怎么做?

async function fetchCryptoData(symbol) {
  try {
    const response = await fetch(
      `https://api.binance.com/api/v3/klines?symbol=${symbol}USDT&interval=5m&limit=2`
    );
    const data = await response.json();

    // Mise à jour du tableau avec les données et la couleur
    const cryptoRow = document.getElementById(symbol);

    // Comparaison des intervalles
    const interval1 = parseFloat(data[0][4]) - parseFloat(data[0][1]);
    const interval2 = parseFloat(data[1][4]) - parseFloat(data[1][1]);

    // Vérification si interval1 est strictement plus grand que les autres intervalles
    const isMaxInterval = interval1 > interval2;

    // Initializsation de count pour interval1 > interval2
    let countIntervalGreaterThan = 0;

    for (let i = 0; i < data.length; i++) {
      const openPrice = parseFloat(data[i][1]);
      const closePrice = parseFloat(data[i][4]);
      const intervalVariation = ((closePrice - openPrice) / openPrice) * 100;
      const cellIndex = i + 1; // Décalage d'une cellule pour éviter la première cellule (Crypto)

      const variationCell = cryptoRow.insertCell(cellIndex);
      const variationValue = intervalVariation.toFixed(2);
      const timestamp = parseInt(data[i][0]);
      const dateValue = new Date(timestamp);
      const hour = dateValue.getHours();
      const minute = dateValue.getMinutes();
      const formattedTime = `${hour.toString().padStart(2, "0")}:${minute
        .toString()
        .padStart(2, "0")}`;

      variationCell.textContent = `${formattedTime}: ${variationValue}%`;

      // Ajout de la classe 'positive' uniquement si interval1 est strictement plus grand que les autres intervalles
      if (i === 0 && isMaxInterval && interval1 !== 0) {
        variationCell.classList.add('positive');
        // Increment le compte si interval1 > interval2
        countIntervalGreaterThan++;
      }
    }

    // Affichage du count après la boucle 
    console.log(`Number of times interval1 > interval2: ${countIntervalGreaterThan}`);



  } catch (error) {
    console.error(
      `Erreur lors de la récupération des données pour ${symbol}:`,
      error
    );
  }
}


fetchCryptoData("1INCH");
fetchCryptoData("AAVE");
fetchCryptoData("ACH");
fetchCryptoData("ADA");
fetchCryptoData("AGIX");
fetchCryptoData("AGLD");
....

为什么我有几行而不是一行来添加总数?

enter image description here

javascript asynchronous binance
1个回答
0
投票

仅仅因为

fetchCryptoData
被多次调用,而你
console.log
fetchCryptoData
内部。

这也意味着您的

countIntervalGreaterThan
变量实际上是单个调用结果的值,而不是全部调用结果的值。

最好让

fetchCryptoData
返回每次调用的计数(小计),然后等待所有调用并将它们相加(总计)。

async function fetchCryptoData(symbol) {
  try {
    const response = await fetch(
      `https://api.binance.com/api/v3/klines?symbol=${symbol}USDT&interval=5m&limit=2`
    );
    const data = await response.json();

    // Mise à jour du tableau avec les données et la couleur
    const cryptoRow = document.getElementById(symbol);

    // Comparaison des intervalles
    const interval1 = parseFloat(data[0][4]) - parseFloat(data[0][1]);
    const interval2 = parseFloat(data[1][4]) - parseFloat(data[1][1]);

    // Vérification si interval1 est strictement plus grand que les autres intervalles
    const isMaxInterval = interval1 > interval2;

    // Initializsation de count pour interval1 > interval2
    let countIntervalGreaterThan = 0;

    for (let i = 0; i < data.length; i++) {
      const openPrice = parseFloat(data[i][1]);
      const closePrice = parseFloat(data[i][4]);
      const intervalVariation = ((closePrice - openPrice) / openPrice) * 100;
      const cellIndex = i + 1; // Décalage d'une cellule pour éviter la première cellule (Crypto)

      const variationCell = cryptoRow.insertCell(cellIndex);
      const variationValue = intervalVariation.toFixed(2);
      const timestamp = parseInt(data[i][0]);
      const dateValue = new Date(timestamp);
      const hour = dateValue.getHours();
      const minute = dateValue.getMinutes();
      const formattedTime = `${hour.toString().padStart(2, "0")}:${minute
        .toString()
        .padStart(2, "0")}`;

      variationCell.textContent = `${formattedTime}: ${variationValue}%`;

      // Ajout de la classe 'positive' uniquement si interval1 est strictement plus grand que les autres intervalles
      if (i === 0 && isMaxInterval && interval1 !== 0) {
        variationCell.classList.add('positive');
        // Increment le compte si interval1 > interval2
        countIntervalGreaterThan++;
      }
    }

    return { countIntervalGreaterThan } 

  } catch (error) {
    console.error(
      `Erreur lors de la récupération des données pour ${symbol}:`,
      error
    );
  }
}



Promise.all([
  fetchCryptoData("1INCH"),
  fetchCryptoData("AAVE"),
  fetchCryptoData("ACH"),
  fetchCryptoData("ADA"),
  fetchCryptoData("AGIX"),
  fetchCryptoData("AGLD"),
  // ... etc
]).then((values) => {
  const total = values.reduce((accumulator, value) => {
    return accumulator + value.countIntervalGreaterThan
  }, 0)

  // Affichage du count après la boucle 
  console.log(`Number of times interval1 > interval2: ${total}`);
});

© www.soinside.com 2019 - 2024. All rights reserved.