【发布时间】:2015-04-27 04:02:08
【问题描述】:
我正在使用 bluebird 库,需要发出一系列 HTTP 请求,并且需要一些响应数据到下一个 HTTP 请求。我构建了一个函数来处理我的请求,称为callhttp()。这需要一个 url 和一个 POST 的正文。
我这样称呼它:
var payload = '{"Username": "joe", "Password": "password"}';
var join = Promise.join;
join(
callhttp("172.16.28.200", payload),
callhttp("172.16.28.200", payload),
callhttp("172.16.28.200", payload),
function (first, second, third) {
console.log([first, second, third]);
});
第一个请求获得一个 API 密钥,该密钥需要传递给第二个请求,依此类推。如何从第一个请求中获取响应数据?
更新
这是callhttp 函数:
var Promise = require("bluebird");
var Request = Promise.promisify(require('request'));
function callhttp(host, body) {
var options = {
url: 'https://' + host + '/api/authorize',
method: "POST",
headers: {
'content-type': 'application/json'
},
body: body,
strictSSL: false
};
return Request(options).spread(function (response) {
if (response.statusCode == 200) {
// console.log(body)
console.log(response.connection.getPeerCertificate().subject.CN)
return {
data: response.body
};
} else {
// Just an example, 200 is not the only successful code
throw new Error("HTTP Error: " + response.statusCode );
}
});
}
【问题讨论】:
-
是的,位工作正常,它返回一个承诺,所以连接工作正常。
-
我正在使用请求库并已承诺。
-
您在问题中显示的对
callhttp()的三个调用正在并行处理,因此您不能在其他调用中使用其中任何一个的结果。callhttp()也返回一个承诺吗? -
你能添加你的
callhttp函数吗? -
刚刚添加了
callhttp函数
标签: javascript node.js bluebird