Как добавить задержку внутри цикла asyn c forEach - PullRequest
1 голос
/ 07 января 2020

У меня есть торговый скрипт, который получает значения от объекта «coin», который заполняется вызовом API, затем перебирает внутри async forEach l oop, затем отправляет торговые ордера на сервер.

Серверу требуется не менее 100 мс между каждым запросом. Я использовал setTimeout с обещанием, но я вижу результаты, приходящие на консоль одновременно, поэтому через некоторое время сервер блокируется.

Как спроектировать задержку?
js

Object.keys(coin).forEach(async function(key) {
 const coinz = coin[key];
  let line1 = sellcoinCalc("sell", coinz.usdPair, coinz.usdOrder)
  let line2 = buycoinCalc("buy", coinz.usdtPair, line1)          
  let result = line2-line1
 if (result > 0){
  console.log(result)
  }
 if (result >= profit){
      await sellcoinTrade("sell", coinz.usdPair, coinz.usdOrder)
      await buycoinTrade("buy", coinz.usdtPair, line1)            
  }
      await new Promise(r => setTimeout(r, 200));
  });

1 Ответ

0 голосов
/ 07 января 2020

Используйте for l oop вместо forEach и оберните весь материал в функцию asyn c:

const sleep = ms => new Promise(r => setTimeout(r, ms))

const tradeFn = async () => {
  try {
    for (let i in coin) {
      await sleep(200);
      const coinz = coin[i];
      await sellcoinTrade(coinz /* etc */);
      // etc
    }
  } catch(e) {
    // handle rejections
  }
}
...