выполнение двух запросов на выборку в одной функции с задержкой между - PullRequest
0 голосов
/ 12 октября 2018

так что у меня есть 2 конечные точки, я делаю запрос «post» на первую и в ответ я должен получить какой-то идентификатор, который я использую во втором URL-адресе конечной точки запроса.поэтому я хочу сделать задержку или еще что-то, пока не получу ответ от первого запроса.

req = () => {
  fetch('url', {
      method: 'POST',
      headers: {
        'Authorization': bearer,
        'Content-Type': 'application/json',
      },
      body: 
    })
    .then(response => response.json())
    .then(json => {

    })
  fetch(`url with the id I get from the first request`, {
      method: 'GET',
      headers: {
        'Authorization': bearer,
        'Content-Type': 'application/json',
      }
    })
    .then(response => response.json())
    .then(json => {

    })
}

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы можете связать ваш второй запрос на получение в вашем первом запросе как:

req = () => {
  fetch("url", {
    method: "POST",
    headers: {
      Authorization: bearer,
      "Content-Type": "application/json"
    }
    body:
  })
    .then(response => response.json())
    .then(json => {
      fetch("url with the id I get from the first request", {
        method: "GET",
        headers: {
          Authorization: bearer,
          "Content-Type": "application/json"
        }
      })
        .then(response => response.json())
        .then(json => {});
    });
};

Или вы можете использовать async/await.

req = async () => {
    const first = await ( await fetch( "url", {
      method: "POST",
      headers: {
        Authorization: bearer,
        "Content-Type": "application/json",
      },
      body:
    } ) ).json();

    const second = await ( await fetch( `http://some.url${ first.id }` ),
    {
      method: "GET",
      headers: {
        Authorization: bearer,
        "Content-Type": "application/json",
      },
    } ).json();

    // use the variable second as your last result here.
  };
0 голосов
/ 12 октября 2018

Нет необходимости в задержке как таковой.Вы можете разместить свой второй запрос в .then первого запроса.Это обеспечит выполнение вашего второго запроса только после разрешения первого запроса.Еще одно важное замечание: если для выполнения второго запроса вам понадобится значение первого ответа, вы можете сделать это только в .then первого запроса, потому что в противном случае значение, необходимое для второго запроса, будетбыть вне области видимости.Вот ваш код с необходимой модификацией.

req = () => {
  fetch('url', {
    method: 'POST',
    headers: {
      'Authorization': bearer,
      'Content-Type': 'application/json',
    },
    body: 
    })
    .then(response => response.json())
    .then(json => {
      fetch(`url with json.id or whatever`, {
        method: 'GET',
        headers: {
          'Authorization': bearer,
          'Content-Type': 'application/json',
        }
      })
        .then(response => response.json())
        .then(json => {

        })
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...