更改耗时的web api异步

时间:2017-03-03 03:26:51

标签: javascript python api asynchronous

假设我有一个耗时的Web API,浏览器会调用它并等待超过1分钟的响应。我不希望HTTP连接保持很长时间。

我目前的想法:

  1. 当浏览器调用此API时,API会将操作放入作业队列。
  2. 浏览器每10秒检查一次操作状态。
  3. 操作完成后,设置其状态,浏览器将获得此状态。
  4. 还有更多标准/有效的方法吗? (例如websockets,async / await等?)

1 个答案:

答案 0 :(得分:0)

您可以使用Worker执行任务,postMessage()在任务完成时将数据发布到主线程。

主线程

const worker = new Worker("worker.js");
worker.addEventListener("message", function(event) {
  // check data
  // do stuff with data from `Worker`
  if (event.data === /* expected value */) {

  } else {
    // handle error
  }
});
worker.postMessage("perform task");

Worker

self.addEventListener("message", function(event) {
  if (event.data === "perform task") {
    fetch("/path/to/server")
    .then(function(response) {
      return response.text()
    })
    .then(function(res) {
      self.postMessage(res)
    })
    .catch(function(err) {
      self.postMessage(err)
    })
  }
})