如何检查提取响应以调用另一个响应?

时间:2019-06-19 10:19:28

标签: javascript node.js promise

我试图从API下载json文件。 为此,我需要调用3个端点。

http://url.com/export

它返回一个json:{"exportLoading":true,"file":"export-20190618-183316.json"}

之后,我应该呼叫第二个端点并检查此导出的状态:

http://url.com/export/status

它返回truefalse(服务器正在处理时,此端点返回true。返回false时,文件已完成下载。)< / p>

因此,如果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 个答案:

答案 0 :(得分:1)

您可以使用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)
}

  

注意,我不知道状态的响应,您将不得不更改代码以适应响应。