node.js http GET-为什么不使用&x27;当遇到错误时,它是否返回到调用函数?
有人能告诉我,为什么当遇到“拒绝请求错误”时,这个函数不向我调用它的函数返回任何内容 我希望向调用此函数的函数返回一条错误消息,但当遇到指示的错误时,代码似乎停止执行node.js http GET-为什么不使用&x27;当遇到错误时,它是否返回到调用函数?,node.js,promise,Node.js,Promise,有人能告诉我,为什么当遇到“拒绝请求错误”时,这个函数不向我调用它的函数返回任何内容 我希望向调用此函数的函数返回一条错误消息,但当遇到指示的错误时,代码似乎停止执行 function httpRequest(options, postData) { console.log('DEBUG - httpRequest - begin'); return new Promise(function(resolve, reject) { console.log('DEBUG - httpRequ
function httpRequest(options, postData) {
console.log('DEBUG - httpRequest - begin');
return new Promise(function(resolve, reject) {
console.log('DEBUG - httpRequest - a');
var req = http.request(options, function(res) {
console.log('DEBUG - httpRequest - b');
// reject on bad status
if (res.statusCode < 200 || res.statusCode >= 300) {
console.log('DEBUG - httpRequest - error: bad status ' + res.statusCode);
return reject(new Error('statusCode=' + res.statusCode));
}
// cumulate data
var body = [];
res.on('data', function(chunk) {
body.push(chunk);
});
// resolve on end
res.on('end', function() {
console.log('DEBUG - httpRequest - res.on end');
try {
console.log('DEBUG - httpRequest - body = ' + body);
body = JSON.parse(Buffer.concat(body).toString());
} catch(e) {
console.log('DEBUG - httpRequest - reject(e)');
reject(e);
}
resolve(body);
});
});
// reject on request error
req.on('error', function(err) {
// This is not a "Second reject", just a different sort of failure
console.log('DEBUG - httpRequest - req.on error (second) err = ' + err.response);
reject(err); // *** <--- Why doesn't the error message here get returned to the calling function?
});
if (postData) {
req.write(postData);
}
req.end();
console.log('DEBUG - httpRequest - req.end');
});
函数httpRequest(选项,postData){
log('DEBUG-httpRequest-begin');
返回新承诺(功能(解决、拒绝){
log('DEBUG-httpRequest-a');
var req=http.request(选项、函数(res){
log('DEBUG-httpRequest-b');
//拒绝不良状态
如果(res.statusCode<200 | | res.statusCode>=300){
log('DEBUG-httpRequest-error:bad status'+res.statusCode);
返回拒绝(新错误('statusCode='+res.statusCode));
}
//累积数据
变量体=[];
res.on('data',函数(块){
推(块);
});
//决意
res.on('end',function(){
log('DEBUG-httpRequest-res.on-end');
试一试{
log('DEBUG-httpRequest-body='+body);
body=JSON.parse(Buffer.concat(body.toString());
}捕获(e){
log('DEBUG-httpRequest-reject(e)');
拒绝(e);
}
决议(机构);
});
});
//请求时拒绝错误
请求开启('error',函数(err){
//这不是“第二次拒绝”,只是另一种失败
log('DEBUG-httpRequest-req.on error(second)err='+err.response);
拒绝(err);//***函数使用两个参数,httpRequest
选项和postData
,并返回一个承诺
在中,你说你这样称呼它:
httpRequest(options, function (error, curConditions) { ... });
这是不正确的,原因有二:
- 传递的第二个参数不是POST数据,而是(回调)函数
- 您没有正确处理退回的承诺
正确的称呼方式是:
httpRequest(options).then(function(curConditions) {
... // handle the result
}).catch(function(err) {
... // handle the error
});
您是否正确地处理了返回的承诺?我这样称呼它:httpRequest(选项、函数(错误、curConditions){console.log('DEBUG-164-error='+error.response);});根据我的console.log语句,它似乎没有返回错误。谢谢Robert!这修复了它。我已经编写了很多年了,但我目前是一个n00b,考虑到node.js的异步性质,并且正在使用Promissions。一旦我能够这样做(我在这里的帐户太新),我会投票给你答案。