最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

误差后promisfying https.get没有“消息”

IT培训 admin 5浏览 0评论

误差后promisfying https.get没有“消息”

我使用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('')
    } 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而不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) );
 })
}

误差后promisfying https.get没有“消息”

我使用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('')
    } 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而不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) );
 })
}
发布评论

评论列表 (0)

  1. 暂无评论