【发布时间】: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