承诺 https.get 后没有 'message' 的错误
Error with no 'message' after 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('https://github.com')
} catch(err) {
console.log('>>>>>>>CAUGHT AN ERROR>>>>>>', err.message)
}
console.log('FINISHED')
}
start()
Returns:
>>>>>>>CAUGHT AN ERROR>>>>>> undefined
我怀疑我的代码有问题,但我不确定是怎么回事。 我怎样才能得到真正的错误?
更新:根据要求,只是记录错误而不是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
Stream.
但是你可以从 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) );
})
}
我正在使用 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()
Returns:
>>>>>>>CAUGHT AN ERROR>>>>>> undefined
我怀疑我的代码有问题,但我不确定是怎么回事。 我怎样才能得到真正的错误?
更新:根据要求,只是记录错误而不是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
Stream.
但是你可以从 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) );
})
}