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

How to count the number of times that interval1 > interval2 in an asynchronous

提问人:mohciniya 提问时间:11/17/2023 最后编辑:Brian Tompsett - 汤莱恩mohciniya 更新时间:11/17/2023 访问量:39

问:

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

插图

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

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");
....

为什么我有几行而不是一行将总数相加?

在此处输入图像描述

JavaScript 异步 币安

评论


答:

0赞 adsy 11/17/2023 #1

仅仅因为被多次调用,而你在里面。fetchCryptoDataconsole.logfetchCryptoData

这也意味着您的变量实际上是单个调用结果的值,而不是所有结果的值。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}`);
});