使用 Promise 链接和共享先前结果
在您的代码中,您尝试使用 Bluebird Promise 库发出多个 HTTP 请求,并且您需要将响应数据从一个请求传递到下一个请求。为了实现这一目标,您可以利用多种策略来链接和共享先前的结果与 Promise。
1.链接 Promise
您可以通过从 .then() 处理程序中返回一个 Promise 来链接 Promise。每个后续的 .then() 将收到前一个 Promise 的结果。在您的情况下,您可以按如下方式链接请求:
callhttp("172.16.28.200", payload).then(function(first) { return callhttp("172.16.28.200", first); }).then(function(second) { return callhttp("172.16.28.200", second); });
2。累积结果
或者,您可以将所有结果累积到单个对象中。创建一个对象来存储结果并将其作为参数传递给后续请求:
var results = {}; callhttp("172.16.28.200", payload).then(function(first) { results.first = first; return callhttp("172.16.28.200", first); }).then(function(second) { results.second = second; return callhttp("172.16.28.200", second); }).then(function(third) { results.third = third; });
3.嵌套 Promise
如果您需要访问之前的所有结果,您可以嵌套 Promise。每个嵌套的 Promise 都可以访问外部 Promise 的结果:
callhttp("172.16.28.200", payload).then(function(first) { return callhttp("172.16.28.200", first).then(function(second) { return callhttp("172.16.28.200", second).then(function(third) { // Access all three results here }); }); });
4。打破链条
如果某些请求可以独立进行,您可以打破链条并在所有请求完成后使用 Promise.all() 来收集结果:
var p1 = callhttp("172.16.28.200", payload); var p2 = callhttp("172.16.28.200", payload); var p3 = callhttp("172.16.28.200", payload); Promise.all([p1, p2, p3]).then(function(results) { // All three results are available in the `results` array });
5.使用 async/await(ES7 功能)
在 ES7 中,您可以使用 async/await 简化排序异步操作。这允许您使用常规同步语法,并且中间结果在同一范围内可用:
async function myFunction() { const first = await callhttp("172.16.28.200", payload); const second = await callhttp("172.16.28.200", first); const third = await callhttp("172.16.28.200", second); // Access all three results here } myFunction().then(result => {}).catch(error => {});
以上是如何使用 Bluebird Promises 链接和共享多个 HTTP 请求的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!