如何运行3API调用相互依赖?

How to run 3 API calls that depends on eachother?

您好,我正在尝试制作一个网页,使用 MWS API 从亚马逊卖家中心下载报告。我 运行 遇到的问题是下载一份报告需要 3 次不同的调用!

请求报告并获取其 ID-> 检查status/get 报告 ID -> 下载报告。

目前我有这个 运行 的 3 个单独的按钮,需要按顺序点击,我将如何进行第二个 api 调用等待第一个 return 具体数值等等。

http://docs.developer.amazonservices.com/en_UK/reports/index.html

你基本上有两个选择:

  1. 有一个漫长的 运行 PHP 过程,一次性完成所有工作。您可能必须将 flush() 数据发送到客户端,这样它才不会出现挂起。
  2. 使用不同的 PHP 脚本来完成这三个部分(您可能希望将第 2 步和第 3 步结合起来)并通过 JavaScript 在 "polling loop" 中调用它们。

由于 MWS 报告有时会花费很长时间(有时 >1 小时),您可能需要更改 PHP 设置以允许这么长的 运行 脚本。我个人会选择方法 2。

既然你说你是从网页上做的,我假设你选择的语言是 JavaScript。这里有 JavaScript 个调用和链接其他调用的示例。根据您使用的 library/framework,您可以利用 promises、observables 或回调。

Promises(不要忘记检查错误,我不检查我的示例):

http.get(reportUrl).then(reportResponse => {
    http.get(checkStatusUrl + reportResponse.id).then(statusResponse => {
        http.get(finalUrl + statusResponse.id).then(finalResponse => {
            console.log(finalResponse);
        })
    })
})

Observables:

http.get(reportUrl).subscribe(reportResponse => {
    http.get(checkStatusUrl + reportResponse.id).subscribe(statusResponse => {
        http.get(finalUrl + statusResponse.id).subscribe(finalResponse => {
            console.log(finalResponse);
        })
    })
})

回调:

http.get(reportUrl, reportResponse => {
    http.get(checkStatusUrl + reportResponse.id, statusResponse => {
        http.get(finalUrl + statusResponse.id, finalResponse => {
            console.log(finalResponse);
        })
    })
})

如果您使用的是 server-side 语言,您的 API 应该看起来差不多。发出第一个请求,等待其响应。使用响应进行第二个请求,依此类推。

如果您拨打 ajax 个电话,

  • 你可以设置async: false
  • 您可以将下一个 ajax 调用设置为回调
  • 您可以在调用成功函数中调用下一个 ajax 调用