Как я могу проверить ответ выборки, чтобы позвонить другому? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь загрузить файл json из API.Для этого мне нужно вызвать 3 конечные точки.

http://url.com/export

возвращает json: {"exportLoading":true,"file":"export-20190618-183316.json"}

После этого я должен вызвать вторую конечную точку и проверитьстатус этого экспорта:

http://url.com/export/status

возвращает true или false (во время обработки сервером эта конечная точка возвращает true. Когда возвращается falseфайл сделан для загрузки.)

Итак, если status === false, я могу вызвать последнюю конечную точку http://url.com/download/file_name (я делаю этот запрос, передавая имя файла - возвращенное из первого запроса - для загрузкифайл.

Мой вопрос: как я могу проверить, возвращает ли вторая конечная точка false, чтобы сделать последний запрос и загрузить файл?

Я только что сделал это до второй конечной точки.

app.get('/export', function (req, res, next) {

    global.fetch = fetch
    global.Headers = fetch.Headers;

    const headers = new Headers();
    const username = 'user';
    const password = 'pass';
    const URL = 'http://url.com/export'
    headers.set('Authorization', 'Basic ' + base64.encode(username + ":" + password));

    fetch(URL, {
        method: 'GET',
        headers: headers,
    })
    .then(res => res.json())     
    .then(json => {            
            fetch("http://url.com/exportl/status", { 
            method: 'GET',
            headers: headers,
        }).then(result => ...) 
    })
    .catch(function (error) {
        console.log(error)
      }) 
});

1 Ответ

1 голос
/ 19 июня 2019

Вы можете использовать цикл while, который будет вызывать конечную точку, пока не будет выполнено условие:

app.get('/export', async function(req, res, next) {

  global.fetch = fetch
  global.Headers = fetch.Headers;

  const headers = new Headers();
  const username = 'user';
  const password = 'pass';
  const URL = 'http://url.com/export'
  headers.set('Authorization', 'Basic ' + base64.encode(username + ":" + password));

  fetch(URL, {
    method: 'GET',
    headers: headers,
  }).then(r => r.json)
  .then(data => {
    // use data here
    var status = false
    while (!status) {
      status = await checkStatus()
    }
    // third call
  })
});


function checkStatus() {
  return fetch("http://url.com/exportl/status", {
    method: 'GET',
    headers: headers,
  }).then(r => r.json)
}

Обратите внимание, я не знаю ответ от статуса, вам придется изменить код, чтобы приспособить ответ.

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