如何在每个公理调用之间延迟



我需要在每个 axios POST 调用之间放置一些延迟,以便 POST 调用按顺序排列 - 等待一个完成,然后再发出下一个 POST。

我输入的延迟代码似乎延迟 - 控制台日志显示"延迟"并在那里暂停几秒钟,但在服务器端,POST 调用仍然是并发的。

import * as Axios from "axios";
delay(delayTime:number) {
    var tNow = Date.now();
    var dateDiff = 0;
    do {
       dateDiff = Date.now() - tNow;
       } while (dateDiff < delayTime); //milliseconds
}
// the code below is in a for loop
let axiosConfig = {
        url: myurl,
        method: ‘POST’,
        timeout: 5,
        headers: {
            'Authorization' : AuthStr,
            'Accept' : 'application/json',
            'Content-Type' : 'application/json'
        },
        data: objContent
}
console.log(">>>>>>>>>>>>>>>>>>> Delaying”);
delay(10000);    
let request = Axios.create().request(axiosConfig).
  catch((rejection:any) => {
        // some code
});

为了等待一个 HTTP 请求完成,然后再发出下一个请求,您需要对 HTTP 请求进行排队(队列异步操作(。步骤如下:

  1. 当需要 HTTP 请求时,将其添加到队列中。
  2. 检查队列中是否有任何元素。如果有的话,拿起一个并执行它。
  3. 完成该 HTTP 请求后,转到步骤 2。

示例代码如下所示:

const axios = require('axios');
let queue = [];
function sendRequest(callback) {
  axios.get('http://example.com')
    .then(function() {
      callback();
    }).catch(function () {
      callback();
    });
}
function addRequestToQueue() {
  let id = (Math.random()*100000).toFixed(0);
  if (queue.length === 0) {
    sendRequest(function() {
      queue.splice(queue.indexOf(id), 1);
      consumeQueue();
    });
  }
  queue.push(id);
}
function consumeQueue() {
  if (!queue.length) {
    return;
  }
  let id = queue[0];
  sendRequest(function() {
    queue.splice(queue.indexOf(id), 1);
    consumeQueue();
  });
}

addRequestToQueue();
addRequestToQueue();
addRequestToQueue();
addRequestToQueue();
addRequestToQueue();

最新更新