javascript - 状态码为 200 的 Get() 捕获异常

标签 javascript node.js

一个很简单的get(),状态码是200,怎么会进入catch block 呢?

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 适用于标准“Node 式”回调,这些回调是使用两个参数调用的函数(第一个参数是错误,第二个参数是结果(如果成功)。

如果您检查 https.get 的文档,您会看到这不是标准的 Node 样式回调,它总是只传递结果主体。这被 util.promisify 视为错误,这就是它总是拒绝的原因。

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

关于javascript - 状态码为 200 的 Get() 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53975051/

相关文章:

javascript - 遍历在 VueJS 中不起作用的对象数组

node.js - Npm 脚本失败 - '.' 未被识别为内部或外部命令

javascript - 我可以向所有 WebSocket 客户端广播吗

javascript - Node.js 是否强制 setTimeout 的最小延迟?

javascript - 在事件处理程序中访问事件对象

javascript - 如何在不阻塞水平行的情况下创建两列

javascript - 遍历数组时处理数学表达式

javascript - 可调整大小时,最大化/取消最大化对 Electron 不起作用 : false

javascript - 如何使用 jquery 对两个不同的表进行两次分离搜索

javascript - 对于刚上传到 Meteor GridFS 的图像,第一个请求返回 503