2017-05-15 13 views
0

誰かが私にそれを呼び出す関数に何も返さない "要求エラーで拒否"に遭遇したとき、なぜこの関数は何を教えてもらえますか?node.js http GET - エラーが発生したときに呼び出し元の関数に戻りませんか?

これを呼び出す関数にエラーメッセージを返しますが、指定されたエラーが発生したときにコードが実行を停止するだけです。

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'); 
}); 

}

+0

あなたが適切に返された約束を取り扱いしていますか? – robertklep

+0

私はこれを次のように呼びます:httpRequest(options、function(error、curConditions){ console.log( 'DEBUG-164-error +' error.response); }); 私のconsole.logステートメントに基づいて、エラーが返されていないようです。 –

答えて

1

httpRequest関数は2つの引数、optionspostDataをとり、それが約束を返します。二つの理由で間違ったのです

httpRequest(options, function (error, curConditions) { ... }); 

  • あなたがデータをPOSTされていません渡している第二引数が、your comment

    、あなたはこのようにそれを呼び出すことを述べていますa(コールバック)関数。

  • 返された約束を正しく処理していません。

それを呼び出す正しい方法:

httpRequest(options).then(function(curConditions) { 
    ... // handle the result 
}).catch(function(err) { 
    ... // handle the error 
}); 
+0

ありがとうRobert!それはそれを修正した。私は何年もコーディングしてきましたが、私は現在、node.jsの非同期性と約束事のためにn00bです。 –

+0

私はこれを行うことができたら答えをアップアップします(私のアカウントはあまりにも新しいです)。 –

関連する問題