Асинхронная функция останавливает обработку и не может выдать exc только на производственном кластере aws ec2 - PullRequest
0 голосов
/ 04 февраля 2019

Я столкнулся с необъяснимой ошибкой при развертывании приведенного ниже кода на моем рабочем сайте.Локально все эти функции были протестированы и работают.

Я пытался понять обещания, которые, кажется, не выполняются, но они не исключают никаких исключений.UsersApiGateway.getNonce - это запрос на получение, и я подтвердил, что получаю правильное возвращаемое значение при отправке запроса на получение через POSTMAN.

В моих журналах AWS он в основном показывает, что он работает до точки, указанной ниже, а затем просто останавливается.И затем, возможно, через 10 минут он прекращает попытки вызвать процесс через asyncTimeout, и затем он постоянно зависает.Любая помощь в том, как я могу найти причину этого, приветствуется.

Функция-нарушитель:

async createBuyOrder(tokenAddress, amountSell, amountBuy) {

    amountSell = new BigNumber(amountSell);
    amountBuy  = new BigNumber(amountBuy);

    let nonce = '';
    [amountBuy, amountSell, nonce] = await Promise.all([
      web3Service.convertToWei(tokenAddress, amountBuy),
      web3Service.convertToWei(ETHER_ADDRESS, amountSell),
      usersApiGateway.getNonce(this.adminAccount)
    ]);

   // FUNCTION FAILS TO RETURN ANYTHING AFTER THIS POINT
   // Console.log for nonce, amount buy/sell/buy order below fail to show up
   // that is what I mean by not working

    const buyOrder = {
        "addressBuy" : tokenAddress,
        "amountBuy"  : amountBuy,
        "addressSell": ETHER_ADDRESS,
        "amountSell" : amountSell,
        "nonce"      : nonce,
    }

    await this.createOrder(buyOrder);
}

Вызывается из этой функции:

async populateOrderBook(tokenAddress, numOrders = 1) {

  for(let i = numOrders; i > 0; i--) {
    for(let j = -1; j < numOrders - i; j++){
      try {
            await this.createBuyOrder(tokenAddress, BUYORDER_amountSell, BUYORDER_amountBuy);
            await this.createSellOrder(tokenAddress, SELLORDER_amountBuy, SELLORDER_amountSell);
          } catch(exc) {
            console.log(exc)
          }
    }
  }
}

, которая периодически вызывается в функции init () класса

    asyncTimeout(async () => {
        try {
          await Promise.all([
            this.populateOrderBook(tokenAddress, 3)
          ]);
        } catch (exc) {
            console.error('Error while populating order book from Kyber');
            console.error(exc);
        }
    }, 60000);

Я тестировал, казалось бы, оскорбительную функцию от web3Service, которую она хочет повесить, и, кажется, она работает локально

   async convertToWei(tokenAddress, amount) {
    const numberOfDecimals = await this.tokenDecimals(tokenAddress);
    return new BigNumber(toBaseUnit(amount, numberOfDecimals));
   }

1 Ответ

0 голосов
/ 04 февраля 2019

Оказывается, мое соединение с узлом в цепочке Эфириума не функционировало.Я использовал соединение, чтобы определить, сколько десятичных разрядов для моего вызова функции convertToWei, и, поскольку соединение было разорвано, оно просто застряло в цикле, который никогда не сможет разрешиться.

...