状态代码为200的Get()被捕获在异常中

时间:2018-12-30 03:25:19

标签: javascript node.js

一个非常简单的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);
    }
})();

当我运行它时,会打印出“ failure”(失败),状态为200,为什么? 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在这种情况下,问题是使用util.promisify。 Promisify适用于标准的“节点样式”回调,这是使用两个参数调用的函数(第一个参数是错误,第二个参数是结果,如果成功)。

如果您检查https.get的文档,就会发现这不是标准的节点样式回调,而是总是通过结果正文传递。 util.promisify将其视为错误,这就是它始终拒绝的原因。

您需要自己编写一个小的new Promise包装程序,而不是使用内置的promisify函数,以使代码段正常工作。我建议您跳过麻烦,而使用已经可用的request-promise模块。