Вернуть пустой массив в обработчике Fastify с помощью функции async/await

Постараюсь объяснить свою ситуацию ...

Я попробую сделать кошелек web3 с Moralis с Fasitify сзади и VueJS спереди.

(Я хотел бы сказать, что я уже делаю это в веб-клиенте (vuejs), и все работает хорошо!)

Я начинаю :

У себя за спиной я забираю все ресурсы от пользователя. Это работает, у меня все хорошо, и я могу отправить их обратно на фронт

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

Я делаю это :

      *handlers/token.js*

const getTokenBalances = async () => {
  let userTokens;
  const options = {
    chain: "bsc",
    address: "0x935A438C29bd810c9aBa2F3Df5144d2dF4F3c0A0",
  };
  userTokens = await Moralis.Web3API.account.getTokenBalances(options);
 
  return userTokens;
};

и если я верну userTokens, он будет у меня в Postman. Но теперь я делаю что-то вроде:

      const getTokenBalances = async (tokens) => {
  let userTokens;
  let userBalances = [];
  const options = {
    chain: "bsc",
    address: "0x935A438C29bd810c9aBa2F3Df5144d2dF4F3c0A0",
  };
  userTokens = await Moralis.Web3API.account.getTokenBalances(options);
  userTokens.forEach((token) => {
    if (
      !token.name.match(/^.*\.io/) &&
      !token.name.match(/^.*\.IO/) &&
      !token.name.match(/^.*\.net/) &&
      !token.name.match(/^.*\.Net/) &&
      !token.name.match(/^.*\.com/) &&
      !token.name.match(/^.*\.org/)
    ) {
      getTokenPair(token).then((value) => {
        if (value > 2) {
          checkTokenPrice(token).then((price) => {
            if (price > 0.001) {
              userBalances.push(token);
            }
          });
        }
      });
    }
  });
  userBalances.sort((a, b) => {
    return b.total_value_usd - a.total_value_usd;
  });

  return userBalances;
};
   

userBalances в моем ответе в Postman всегда пусто (и я не понимаю почему?)

Функция getTokenPair:

      const getTokenPair = async (token) => {
  const BNBTokenAddress = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; //BNB
  const options = {
    token0_address: token.token_address,
    token1_address: BNBTokenAddress,
    exchange: "pancakeswapv2",
    chain: "bsc",
  };
  try {
    const pairAddress = await Moralis.Web3API.defi.getPairAddress(options);
    let amount = 0;
    //console.log("token pairAddress : " + pairAddress.pairAddress);
    if (pairAddress.token1.symbol === "BUSD") {
      try {
        let reserve = await getPairReserves(pairAddress.pairAddress);
        amount += reserve / 10 ** 18;
      } catch (err) {
        console.log("error getReservesBUSD : " + err);
      }
    }
    if (pairAddress.token1.symbol === "WBNB") {
      try {
        let reserve = await getPairReserves(pairAddress.pairAddress);
        amount += reserve / 10 ** 18;
      } catch (err) {
        console.log("error getReservesWBNB : " + err);
      }
    }
    //console.log("amount : " + amount)
    return amount;
  } catch (err) {
    console.log("error getPair : " + err);
  }
};

и функция checkTokenPrice:

      const checkTokenPrice = async (token) => {
  let price;
  const options = {
    address: token.token_address,
    chain: "bsc",
    exchange: "PancakeSwapv2",
  };
  try {
    const priceToken = await Moralis.Web3API.token.getTokenPrice(options);
    price = priceToken.usdPrice.toFixed(7);
    token.price = priceToken.usdPrice.toFixed(7);
    token.balance = insertDecimal(token.balance, token.decimals);

    token.total_value_usd = (token.balance * token.price).toFixed(2);

    return price;
  } catch (err) {
    console.log("error tokenPrice : " + err);
  }
};

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

Спасибо за помощь!

0 ответов

Другие вопросы по тегам