【问题标题】:How to run 3 API calls that depends on eachother?如何运行 3 个相互依赖的 API 调用?
【发布时间】:2018-03-20 19:42:55
【问题描述】:

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

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

目前我有 3 个单独的按钮需要按顺序单击,我将如何让第二个 api 调用等待第一个返回特定值等等。

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

【问题讨论】:

  • 显示你的代码!
  • 我没有展示代码只是因为它更多地是关于做它的过程而不是被困在一段特定的代码中。

标签: php amazon-mws


【解决方案1】:

既然您说您是从网页执行此操作,我假设您选择的语言是 JavaScript。以下是进行调用并将其他调用链接到它的 JavaScript 示例。根据您使用的库/框架,您可以利用承诺、可观察对象或回调。

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

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

可观察的

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);
        })
    })
})

如果您使用的是服务器端语言,您的 API 应该看起来差不多。发出第一个请求,等待它的响应。使用响应发出第二个请求,依此类推。

【讨论】:

  • 对不起,这是我的错,在我使用的语言是 php 之前我没有使用堆栈,但你的回复绝对有帮助!
  • 如果它可以帮助您解决问题,请随时接受答案。
【解决方案2】:

你基本上有两种选择:

  1. 拥有一个长时间运行的 PHP 进程,它可以一次性完成所有操作。您可能必须将数据flush() 到客户端,以免它看起来挂起。
  2. 让不同的 PHP 脚本执行这三个部分(您可能希望将第 2 步和第 3 步结合起来)并通过 JavaScript 在“轮询循环”中调用它们。

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

【讨论】:

  • 感谢您这么快的回复,我会直接解决的!
【解决方案3】:

如果你进行 ajax 调用,

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

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多