将响应数据传递到后续请求的报头和其他字段中
Passing response data into headers and other fields in subsequent requests
我将Bluebird
promises库与request-promise
结合使用。这是我的代码:
var Bluebird = require('bluebird');
var rp = require('request-promise');
var request1 = rp(paramsReq1);
var request2 = rp(paramsReq2);
var request3 = rp(paramsReq3);
Bluebird.all([request1, request2, request3])
.spread(function (responseOfReq1, responseOfReq2, responseOfReq3) {
// All requests succeeded.
// Process the responses now.
})
.catch(function (err) {
// At least one request failed.
// Do your error handling here.
});
这是可行的,但是我需要将从第一个请求(apikey)返回的一些内容传递到第二个请求的标头。然后,我需要将来自第二个请求的一些响应数据传递给第三个请求。
我怎样才能最好地做到这一点。
如果您需要在请求2中使用响应1中的数据,而在请求3中使用响应2中的数据,那么您无法并行运行它们。
你必须这样做:
rp(paramsReq1).then(function (responseOfReq1) {
// do something with responseOfReq1 ...
return rp(paramsReq2);
}).then(function (responseOfReq2) {
// do something with responseOfReq2 ...
return rp(paramsReq3);
}).then(function (responseOfReq3) {
// do something with responseOfReq3 ...
}).catch(function (err) {
// At least one request failed.
// Do your error handling here.
});
换句话说,你必须链接调用,因为如果你需要responseOfReq1
准备paramsReq2
,那么在rp(paramsReq1)
返回的承诺得到解决之前,你不能调用rp(paramsReq2)
。
var request1 = rp(paramsReq1);
var request2 = rp(paramsReq2);
var request3 = rp(paramsReq3);
不会做您需要的事情,因为它将并行运行它们,并且下一个请求将无法访问前一个响应—它们将在任何一个有机会完成之前同时开始。无论您如何处理返回的承诺,请求都已经开始了。
相关文章:
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 除修剪外的其他功能
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- Array.length似乎不起作用;console.log则显示其他情况
- 如何消除代码中的未定义和其他问题
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- Jquery未定义函数正在停止其他操作
- 如何将我的javascript库公开给其他客户端使用
- Javascript阻止其他Javascript代码
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何“;过滤器”;或者以其他方式重构该数据
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- jQuery:暂停按钮可以暂停所有其他操作
- 将响应数据传递到后续请求的报头和其他字段中