javascript - 轮询 api 直到响应成功

标签 javascript jquery

我正在尝试轮询 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);

文档:

fetch()

async / await

关于javascript - 轮询 api 直到响应成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57396797/

相关文章:

javascript - Angular $resource - 预期响应包含一个数组,但得到一个对象

javascript - 使用ajax javascript提交表单数据

java - 是否有一个 javascript 库可以在图像上进行注释并将注释作为图像保存在服务器中?

Javascript/jQuery 检测输入是否聚焦

Jquery下载

javascript - 如何删除 Fabric 中之前添加的矩形对象?

javascript - 基于Web的文字处理器

javascript - 如何关闭和打开像 Bootstrap 这样的模式

javascript - 如何计算两个DOM元素之间的关系? IE。他们有多密切相关)

javascript - 在 jQuery Mobile 选择菜单中,我可以强制 LI 元素与下划线选项元素具有相同的类吗?