Node.js для значения цикла () продолжают расти? - PullRequest
0 голосов
/ 31 октября 2019

Я установил интервал и цикл для заказов партии,

Однако номер партии в цикле продолжает увеличиваться.

Вот мой код

const Web3 = require('web3')
const web3 = new Web3('ws://127.0.0.1:8546')

const accounts = require('./tps.json');

const quoteInterval = 5 * 1000;

const batch = new web3.BatchRequest();

const sendTransactions = async () => {
  try {
    for (let i = 0; i < 100; i++) {
      let account = accounts[i];
      const tx = web3.eth.sendTransaction.request(
        {
          from: web3.utils.toChecksumAddress("0xa00ce1f7fbf8298f4163ab23de8752942bdff98e"),
          to: web3.utils.toChecksumAddress(account),
          gas: 21000,
          gasPrice: 1000000000,
          value: 1
        }
      )
      batch.add(tx)
    }
    await batch.execute().then(console.log);
  } catch (error) {
    console.log(error);
    process.exit(1)
  }
};

if (web3.eth.net.isListening()) {
  sendTransactions();

  setInterval(() => {
    sendTransactions();
  }, quoteInterval);
}

iзначение не увеличивалось, однако функция sendTransactions () работает как 2, 3, 4 или 5 раз после каждого интервала

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

const quoteInterval = 5*1000;

const sendTransactions = async () => {
  try {
    for (let i = 0; i < 100; i++) {
    console.log(i);
    
    }
    
  } catch (error) {
    console.log(error);
    
  }
};


  sendTransactions();

  setInterval(() => {
    sendTransactions();
  }, quoteInterval);

Согласно логике, оно не будет превышать 100

0 голосов
/ 31 октября 2019

Где вы видели, что значение i продолжает расти? Вы куда-то положили console.log?

Следующая упрощенная версия (с теми же вашими контекстными операциями) работает нормально:

async function asyncOperation(x) {
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log(x) # this always outputs 0 < x < 5
            resolve()
        }, 50)
    })
}

const asyncFunction = async () => {
    allPromises = []
    for (let i = 0; i < 5; i++) {
        allPromises.push(asyncOperation(i))
    }
    await Promise.all(allPromises)
};

setInterval(() => asyncFunction(), 500)
...