将响应数据传递到后续请求的报头和其他字段中

Passing response data into headers and other fields in subsequent requests

本文关键字:报头 其他 字段 请求 数据 响应      更新时间:2023-09-26

我将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);

不会做您需要的事情,因为它将并行运行它们,并且下一个请求将无法访问前一个响应—它们将在任何一个有机会完成之前同时开始。无论您如何处理返回的承诺,请求都已经开始了。