一个非常简单的get(),状态码为200时,它如何进入catch块?
const { promisify } = require('util');
const { get, post, patch, del } = require('https');
//const [ getPm, postPm, patchPm, deletePm ] = [get, post, patch, del].map(promisify);
const getPm = promisify(get);
(async () => {
try {
const res = await getPm('https://www.yahoo.com');
console.log('success !');
} catch (e) {
console.log('failure !');
console.log(e.statusCode);
}
})();
当我运行它时,打印出“失败”,状态为200,怎么来的?
有什么建议么 ?
最佳答案
在这种情况下,问题是使用util.promisify
。 Promisify适用于标准的“节点样式”回调,这是使用两个参数调用的函数(第一个参数是错误,第二个参数是结果(如果成功))。
如果您检查文档中的https.get,您会发现这不是标准的节点样式回调,它始终只是传递给结果主体。 util.promisify
将其视为错误,因此总是拒绝。
您需要自己编写一个小的new Promise
包装器,而不是使用内置的promisify函数,以便您的代码片段起作用。我建议您跳过麻烦,而改用已经可用的request-promise模块。