我正在尝试轮询 API 端点(提供即时响应),直到它给我成功响应,然后保存响应结果
如果 API 具有给定 jobId
的数据它返回一个字符串,否则返回 400 状态(我可以完全控制 API,因此可以调整行为)。我想每三秒轮询一次 API 端点以查看它是否有输出。
我是 javascript 及其衍生产品的初学者,所以下面是我破解的函数
function getJobResults(jobId) {
setTimeout(function() {
$.get('/check_for_results/' + jobId, function(data, status) {
return data
})
.fail(function() {
getJobResults(jobId);
});
}, 3000)
}
如何修改它以便我可以执行以下操作?
var expectedStringResult = getJobResults(jobId)
目前,它没有返回结果。另外,我怎样才能重写该函数以使其更合理?
谢谢!
最佳答案
使用更现代的 async/await 和 fetch 这可以很容易地写成:
const timer = ms => new Promise(res => setTimeout(res, ms));
async function poll(url) {
let ok = false, response;
while(!ok) {
await timer(3000);
try {
(response = { ok } = await fetch(url));
} catch(e) { /* keep looping */ }
}
return response;
}
可用作:
poll("https://stackoverflow.com")
.then(res => res.text())
.then(console.log);
文档:
关于javascript - 轮询 api 直到响应成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57396797/