如何运行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
你基本上有两个选择:
- 有一个漫长的 运行 PHP 过程,一次性完成所有工作。您可能必须将 flush() 数据发送到客户端,这样它才不会出现挂起。
- 使用不同的 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 调用
您好,我正在尝试制作一个网页,使用 MWS API 从亚马逊卖家中心下载报告。我 运行 遇到的问题是下载一份报告需要 3 次不同的调用!
请求报告并获取其 ID-> 检查status/get 报告 ID -> 下载报告。
目前我有这个 运行 的 3 个单独的按钮,需要按顺序点击,我将如何进行第二个 api 调用等待第一个 return 具体数值等等。
http://docs.developer.amazonservices.com/en_UK/reports/index.html
你基本上有两个选择:
- 有一个漫长的 运行 PHP 过程,一次性完成所有工作。您可能必须将 flush() 数据发送到客户端,这样它才不会出现挂起。
- 使用不同的 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 调用