如何在每次axios调用之间延迟

时间:2019-04-25 16:49:47

标签: http axios

我需要在每个axios POST调用之间设置一些延迟,以便POST调用按顺序进行-等待一个完成后再发布下一个POST。

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

key (string), 
value(string), 
type (string) - tells if the value is of string, integer, boolean, json type 

1 个答案:

答案 0 :(得分:0)

为了在发出下一个请求之前等待一个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();
相关问题