Javascript 阻止代理使用的套接字

Javascript 阻止代理使用的套接字,javascript,node.js,Javascript,Node.js,我正在抓取一个API。有很多要求。如果我做了太多的请求,API一开始看起来很可疑,我会得到一堆503。没关系,当我得到一个503时,我已经在重新运行请求之前设置了一个计时器,并且对于同一个请求的每个503,这个计时器由两个定时器供电 但它不起作用。因为我的计时器是异步的。当我得到503时,在启动这个计时器之后,节点立即重用套接字处理挂起的请求。所以我的计时器基本上不会改变任何东西 我怎样才能防止这种情况 到目前为止,我所尝试的: 在重新启动请求之前使用settimeout 使用同步模块,其暂停不

我正在抓取一个API。有很多要求。如果我做了太多的请求,API一开始看起来很可疑,我会得到一堆503。没关系,当我得到一个503时,我已经在重新运行请求之前设置了一个计时器,并且对于同一个请求的每个503,这个计时器由两个定时器供电

但它不起作用。因为我的计时器是异步的。当我得到503时,在启动这个计时器之后,节点立即重用套接字处理挂起的请求。所以我的计时器基本上不会改变任何东西

我怎样才能防止这种情况

到目前为止,我所尝试的:

在重新启动请求之前使用settimeout 使用同步模块,其暂停不起作用,因为光纤是异步的
有什么想法吗 我终于得出结论,现在是不可能的

为了防止大规模泛滥,我使用异步模块的队列对象。代码是这样的:

var queue = new Sync.Queue( function ( task, markAsComplete ) {
  Http.request( {
    agent : false, // we will use our own rate limiter, so we don't need agents
    ...
  }, function ( err, res ) {
    res.on( 'end', function ( ) {
      if ( IS_503 ) {
        var originalConcurrency = queue.concurrency; // saving the original concurrency
        queue.concurrency = 1;                       // our timeout will now stop every request
        setTimeout( function ( ) {
          queue.concurrency = originalConcurrency;   // restoring the concurrency
          queue.push( task );
          markAsComplete( );
        }, 1000 );
      }
    } );
  } );
}, numberOfParallelRequests );