Javascript 如何在异步forEach循环中添加延迟

Javascript 如何在异步forEach循环中添加延迟,javascript,loops,foreach,async-await,settimeout,Javascript,Loops,Foreach,Async Await,Settimeout,我有一个交易脚本,它从“coin”对象获取值,该对象由一个API调用填充,然后在async forEach循环中迭代,然后向服务器发送交易订单 服务器在每个请求之间至少需要100毫秒。我使用了setTimeout,但我可以看到结果一下子传到控制台,所以服务器在一段时间后会被禁止 我应该如何设计延迟? js Object.keys(coin).forEach(async function(key) { const coinz = coin[key]; let line1 = sellcoin

我有一个交易脚本,它从“coin”对象获取值,该对象由一个API调用填充,然后在
async forEach
循环中迭代,然后向服务器发送交易订单

服务器在每个请求之间至少需要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));
  });

使用
for
循环而不是
forEach
并将整个内容包装到一个异步函数中:

const sleep=ms=>新承诺(r=>setTimeout(r,ms))
const tradeFn=async()=>{
试一试{
为了(让我投入硬币){
等待睡眠(200);
const coinz=硬币[i];
等待销售cointrade(coinz/*etc*/);
//等
}
}捕获(e){
//处理拒绝
}
}

使用
for
循环,而不是
forEach
,并将所有内容包装成一个异步函数:

const sleep=ms=>新承诺(r=>setTimeout(r,ms))
const tradeFn=async()=>{
试一试{
为了(让我投入硬币){
等待睡眠(200);
const coinz=硬币[i];
等待销售cointrade(coinz/*etc*/);
//等
}
}捕获(e){
//处理拒绝
}
}

这是否回答了您的问题?您可以使用setTimeout函数。另一种解决方案是使用rxjs库中的流。我需要异步函数中的解决方案。为了使其正常工作,
forEach
回调必须由forEach的内部工作来等待。很肯定不是这样的。您必须以其他方式添加等待部分。这是否回答了您的问题?您可以使用setTimeout函数。另一种解决方案是使用rxjs库中的流。我需要异步函数中的解决方案。为了使其正常工作,
forEach
回调必须由forEach的内部工作来等待。很肯定不是这样的。您必须以其他方式添加等待部分。是否必须使用for循环,forEach方法对于复杂的coin对象更简单是的,但由于某些原因不能异步工作。此基本
for
循环或
for(让我投入硬币)
解决方案将起作用。或者,您可以使用for…wait循环,但它需要自定义迭代器函数。我必须使用for循环吗,forEach方法对于复杂的coin对象更简单是的,但由于某些原因不能异步工作。此基本
for
循环或
for(让我投入硬币)
解决方案将起作用。或者,您可以使用for…wait循环,但它需要自定义迭代器函数。