Node.js 节点-基于第一个http.request的结果回调第二个http.request
我正在用NodeJs中的http.request调用一个API 调用的目的是在外部服务上创建一个新项。为此,需要提供一个Node.js 节点-基于第一个http.request的结果回调第二个http.request,node.js,xmlhttprequest,Node.js,Xmlhttprequest,我正在用NodeJs中的http.request调用一个API 调用的目的是在外部服务上创建一个新项。为此,需要提供一个标签参数。如果成功,则返回状态代码200和JSON格式的新创建项。但是,如果该项已经存在,则返回404。获取该项需要调用其他方法 以下是我是如何实现它的: function logError(err) { console.log(err) } function doSomething(chunk) { console.log(chunk) } if (var
标签
参数。如果成功,则返回状态代码200和JSON格式的新创建项。但是,如果该项已经存在,则返回404。获取该项需要调用其他方法
以下是我是如何实现它的:
function logError(err) {
console.log(err)
}
function doSomething(chunk) {
console.log(chunk)
}
if (var == true) {
var domain = 'domain',
port = 80,
pathNew = '/api/v2/new?label=' + label + '&api_key=' + process.env.API_KEY,
pathGet = '/api/v2/get?label=' + label + '&api_key=' + process.env.API_KEY,
method = 'GET';
http.request({
host: domain,
port: port,
path: pathNew,
method: method
}, function(res) {
res.setEncoding('utf8');
if( res.statusCode == '404') {
http.request({
host: domain,
port: port,
path: pathGet,
method: method
}, function(res2) {
res2.setEncoding('utf8');
res2.on('data', doSomething);
}).on('error', logError).end();
}
res.on('data', doSomething);
}).on('error', logError).end();
我意识到这可能不是最好的方法。我如何才能以更精简的方式完成这项工作?这甚至不会像您现有的方式那样工作。您必须更改
res2.on('data',doSomething(chunk))代码>至res2.on('data',doSomething)
和其他.on()
处理程序也是如此。显示的方式立即调用函数,而不是传递稍后可以调用的函数引用。另外,consol.log(chunk)
应该是console.log(chunk)
仍然需要帮助:)这是正确的常规方法。您是否有需要帮助的具体问题?该模块可能会使这一点稍微容易一些。我认为可能有更好的方法来做到这一点,而不必去回调地狱,也许通过async
在一个回调中嵌入第二个操作很难说是回调地狱。您可以使用承诺或类似async的库来链接或排序异步操作。要使用承诺,您必须首先“承诺”您正在使用的接口,以便可以使用承诺。一旦得到许可,您可以使用request(…)。然后(函数(第一个)返回request(…)代码>它在回调中仍然有第二个操作(承诺仍然是回调),但它稍微简化了一点。