【问题标题】:How to determine when an API job is completed?如何确定 API 作业何时完成?
【发布时间】:2020-10-18 07:45:50
【问题描述】:

请原谅我可能有的任何误解,我是 HTTP 请求的新手。

我正在使用文件转换 API (online-convert.com) 将上传的 MIDI 文件转换为 MP3。 转换过程涉及 3 个必须串行完成的 HTTP 请求,我正在使用 Fetch。

第 2 个 HTTP 请求将输入文件上传到服务器,第 3 个 HTTP 请求获取已完成的作业详细信息。问题是,如果我尝试在第二个请求完成后立即发出第三个请求,那么响应会指出转换过程仍在进行中并且输出尚未准备好。

我幼稚的解决方案是设置一个间隔循环,每隔 x 毫秒继续发出第三个请求,直到响应指示作业完成。这感觉像是一个不自然的解决方案,我想知道是否有更好的方法来做到这一点。

很抱歉,如果我的问题是针对我正在使用的 API 的,但我们将不胜感激!

【问题讨论】:

  • 您可以轮询 api,但他们对 api 用户的首选方式是让您发送一个回调 url,他们将在完成后(或在每次状态更改时)发送完成的详细信息, apiv2.online-convert.com/docs/getting_started/job_callback.html
  • 查看有时文件可能很大或更大。然后你将不得不等待大量的时间,并且你不能仅仅通过显示一个加载器来阻止用户做其他事情,这就是 API 的设计方式。如果它仍在发生,第三个端点将始终为您提供约定的状态。无论是否有错误都完成了,理想情况下它应该返回结果以显示给用户。
  • 如果您可以延迟 API 响应直到转换完成后的文件,听起来您不需要第三个请求;这可能是 API 特定的问题,而不是前端。
  • @PatrickEvans 非常感谢,我不知道我自己是怎么错过那个网页的。在该页面上的示例中,他们使用 PHP 通过回调获取完整的详细信息。是否可以仅使用 javascript 来执行此操作?另外,根据我的理解,回调是一个函数,那么我们如何为 API 提供回调“url”以在完成时调用?
  • Callback 可以是一个函数,当某事完成时被回调,但也可以是 api “调用”(执行自己的 http 请求)返回以向 api 用户发送信息的 url . PHP 只是一个服务器端示例,您可以使用任何您想要的服务器端语言,但 url 必须是您的服务器。他们将无法向客户端 javascript 发送请求。

标签: javascript api es6-promise fetch-api file-conversion


【解决方案1】:

感谢以上 Patrick Evans 的 cmets。 我决定通过轮询而不是回调 URL 来获取已完成作业的详细信息。

我能够使用 Fetch 和 async/await 轻松实现这一点,并发现这比为可能不需要它们的简单 Web 工具设置服务器端脚本更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2017-11-24
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2015-08-30
    相关资源
    最近更新 更多