Как задержать между каждым осевым вызовом - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно установить некоторые задержки между каждым вызовом POST Axios, чтобы вызовы 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
});

1 Ответ

0 голосов
/ 26 апреля 2019

Чтобы дождаться завершения одного 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...