javascript - promisfying https.get 后出现 no 'message' 错误

标签 javascript node.js promise async-await ecmascript-2017

我正在使用 ES2017 的 await 关键字,以及 util.promisify()https.get()await< 一起使用.

使用以下代码测试连接到 HTTPS:

const util = require('util'),
    https = require('https'),
    httpsGet = util.promisify(https.get);

var start = async function(){
    try {
        var res = await httpsGet('https://github.com')
    } catch(err) {
        console.log('>>>>>>>CAUGHT AN ERROR>>>>>>', err.message)
    }
    console.log('FINISHED')
}

start()

返回:

>>>>>>>CAUGHT AN ERROR>>>>>> undefined

我怀疑我的代码已损坏,但我不确定如何损坏。 我怎样才能得到真正的错误?

更新:根据要求,仅记录 err 而不是 err.message:

>>>>>>>CAUGHT AN ERROR - RAW ERR>>>>>> IncomingMessage {
  _readableState:
   ReadableState {
     objectMode: false,
     highWaterMark: 16384,
     buffer: BufferList { head: null, tail: null, length: 0 },
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: null,
     ended: false,
     endEmitted: false,
     reading: false,

最佳答案

https.get 的回调 does not have an err option 。它是一个流 - 错误通过 .on(error) 处理。因此它没有 err 回调,并且不能与 util.promisify()

一起使用

显示 err 的唯一原因是 res 是回调的最后一项 - promisify 预计会出现错误。所以这里抛出的err实际上是一个res流。

但是你可以从 https.get 做出 promise ,而不需要 util.promisify:

function httpsGet(option) {
  return new Promise( (resolve, reject) => {                    
    let request = https.get( option, (response) => {
        if (response.statusCode < 200 || response.statusCode > 299) {
        reject( new Error('Failed to load page'+response.statusCode) );}

        let data = "";
        response.on( 'data', (chunk) => data += chunk );
        response.on( 'end', () => resolve(JSON.parse(data)) );
    } );
    request.on( 'error', (err) => reject(err) );
 })
}

关于javascript - promisfying https.get 后出现 no 'message' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44968769/

相关文章:

javascript - 如何将异步函数包装在 Promise 中?

javascript - 如何在 React-Quill 中设置字符长度

javascript - 查找数组是否包含用户

javascript - JSON 数据和 Ajax 调用的 URL

javascript - 如何从 Firestore Node.js 获取时间戳格式数据

javascript - 异步函数在等待嵌套的 Promise 完成时永远不会返回

javascript - d3js 为时间刻度轴设置 tickValues

node.js - 限制 Mongoose 字段值

javascript - Breeze 续集 - 警告续集版本已过时 3.x 有一个关键的安全修复

javascript - 为什么我的回调不会附加到这个 promise 链的末尾?