You need to enable JavaScript to run this app. Electron发起GET请求如何等待响应返回后再return避免得到undefined
优惠活动
大模型
产品
解决方案
定价
更多

Electron发起GET请求如何等待响应返回后再return避免得到undefined

问题根因

  • 你在if (info) resolve(info)之后没有终止逻辑,后续的reject()一定会执行,Promise状态一旦被reject覆盖,外部then不会触发,自然拿不到返回值
  • 响应的data事件可能触发多次(分块传输场景),直接解析单个chunk可能出现JSON解析错误,需要先拼接完整响应体再处理
  • 没有监听error事件捕获请求层面的异常,容易出现未处理的Promise rejection

修正后可运行代码

const { net } = require('electron')
const URL = '替换为你的实际请求地址'

let getInfo = async () => {
  return new Promise((resolve, reject) => {
    const request = net.request({
      url: URL,
      method: 'GET'
    })

    // 捕获请求级错误
    request.on('error', (err) => {
      reject(err)
    })

    request.on('response', (response) => {
      let chunks = []
      // 拼接所有响应块
      response.on('data', (chunk) => {
        chunks.push(chunk)
      })
      // 响应完全接收后再处理数据
      response.on('end', () => {
        try {
          let body = JSON.parse(Buffer.concat(chunks).toString())
          let info = body.data
          if (info) {
            resolve(info)
          } else {
            reject(new Error('响应中无有效data字段'))
          }
        } catch (parseErr) {
          reject(parseErr)
        }
      })
      // 捕获响应级错误
      response.on('error', (err) => {
        reject(err)
      })
    })

    request.end()
  }).then(data => {
    console.log("From then: " + data)
    return data
  })
}

// 外部调用增加catch捕获异常
getInfo().then(data => {
  console.log("From outside: " + data)
}).catch(err => {
  console.error("请求出错: ", err)
})

关键调整说明

  • 把Promise的resolve/reject逻辑移到response.on('end')事件中,确保完整接收所有响应数据后再处理
  • 补充了请求、响应、JSON解析三个层面的错误捕获,避免未处理异常
  • resolve后不会再执行reject逻辑,Promise状态稳定,外部then可以正常拿到返回值
  • 适配分块传输场景,不会出现JSON解析失败的问题

内容的提问来源于stack exchange,提问作者Bazoogle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 08:36:11