0

我正在发出一个请求node-fetch并收到以下响应(当它出现时console.log):

Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: Gunzip {
      _writeState: [Uint32Array],
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 5,
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: true,
      bytesWritten: 0,
      _handle: [Zlib],
      _outBuffer: <Buffer 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 c0 bd 60 05 00 00 00 00 c0 bd 60 05 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 be ... 16334 more bytes>,
      _outOffset: 0,
      _chunkSize: 16384,
      _defaultFlushFlag: 2,
      _finishFlushFlag: 2,
      _defaultFullFlushFlag: 3,
      _info: undefined,
      _maxOutputLength: 4294967295,
      _level: -1,
      _strategy: 0,
      [Symbol(kCapture)]: false,
      [Symbol(kTransformState)]: [Object],
      [Symbol(kError)]: null
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    url: 'https://accounts.spotify.com/api/token',
    status: 200,
    statusText: 'OK',
    headers: Headers { [Symbol(map)]: [Object: null prototype] },
    counter: 0
  }
}

我的问题

如何将所有内容提取[Symbol(Response internals)]为对象?

澄清

我知道下面列出的各个属性[Symbol(Response internals)]可以作为我的响应的属性进行访问。例如,

const response = await fetch(..);
console.log(response.statusText)

会给我那个'OK'字符串。我也知道这个线程,它解决了这个问题(但不是我的)。

我要问的是如何[Symbol(Response internals)]作为一个整体来具体化并引用它。

附加评论

我(想我)知道Symbol做什么,我可以检索符号

[Symbol(Body internals), Symbol(Response internals)]

通过我的response.

但是如何提取附加到这些符号的值(对象)?

Object.values()不这样做,并且Object.entries()也不这样做。

4

1 回答 1

1

啊! 这样做:

const response = fetch(..)
console.log(response[Object.getOwnPropertySymbols(response)[1])

这会给我

{
  url: 'https://accounts.spotify.com/api/token',
  status: 200,
  statusText: 'OK',
  headers: Headers {
    [Symbol(map)]: [Object: null prototype] {
      date: [Array],
      'content-type': [Array],
      'set-cookie': [Array],
      'sp-trace-id': [Array],
      'strict-transport-security': [Array],
      'x-content-type-options': [Array],
      'content-encoding': [Array],
      vary: [Array],
      server: [Array],
      via: [Array],
      'alt-svc': [Array],
      connection: [Array],                                 
'transfer-encoding': [Array]
    }
  },                                                   
counter: 0
}

这是在第二个符号属性 下列出的内容Symbol(Response internals)

编辑

最后,我还在这里找到了关于 SO 的相关先前讨论。

它还描述了一些更强大的解决方案,不依赖于符号的顺序(RE:下面的评论涉及到这一点)。

于 2021-04-08T13:40:08.783 回答