我试图从API下载json文件。 为此,我需要调用3个端点。
http://url.com/export
它返回一个json:{"exportLoading":true,"file":"export-20190618-183316.json"}
之后,我应该呼叫第二个端点并检查此导出的状态:
http://url.com/export/status
它返回true
或false
(服务器正在处理时,此端点返回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)
})
});
答案 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)
}
注意,我不知道状态的响应,您将不得不更改代码以适应响应。