You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在request请求函数外部访问、处理并传递返回的响应数据

可行实现方案

方案1:Promise 封装

将请求逻辑封装为Promise,在外部通过then方法获取处理完成的数组:

// 封装请求逻辑为Promise
function getLocationArray() {
  return new Promise((resolve, reject) => {
    request(process.env.RESOURCE_SHEET, (error, response, html) => {
      if (error || response.statusCode !== 200) {
        return reject(error || new Error('请求响应异常'))
      }
      const locationArray = []
      const $ = cheerio.load(html)
      $("h3").each((i, lle) => {
        const location = $(lle).text()
        if (location.includes("Kansas")) return
        const level = location.includes("In Stock") ? location + " ✅" : location + " ❌"
        locationArray.push(level)
      })
      resolve(locationArray)
    })
  })
}

// 外部调用获取结果
getLocationArray().then(locationArray => {
  console.log(locationArray) // 可拿到正确的数组内容
  // 所有依赖locationArray的后续逻辑都写在此处
}).catch(err => {
  console.error('数据获取失败:', err)
})

方案2:回调函数传递

通过传入回调函数的方式,把处理好的数组传递到外部使用:

function fetchLocationArray(callback) {
  request(process.env.RESOURCE_SHEET, (error, response, html) => {
    if (error || response.statusCode !== 200) {
      return callback(error || new Error('请求响应异常'))
    }
    const locationArray = []
    const $ = cheerio.load(html)
    $("h3").each((i, lle) => {
      const location = $(lle).text()
      if (location.includes("Kansas")) return
      const level = location.includes("In Stock") ? location + " ✅" : location + " ❌"
      locationArray.push(level)
    })
    callback(null, locationArray)
  })
}

// 外部调用
fetchLocationArray((err, locationArray) => {
  if (err) {
    console.error('数据获取失败:', err)
    return
  }
  console.log(locationArray) // 可拿到正确的数组内容
  // 所有依赖locationArray的后续逻辑都写在此处
})

方案3:async/await 同步写法

搭配Promise封装使用async/await语法糖,写法更接近同步代码逻辑:

// 复用方案1中封装好的getLocationArray Promise函数
async function mainLogic() {
  try {
    const locationArray = await getLocationArray()
    console.log(locationArray) // 可直接拿到正确的数组内容
    // 所有依赖locationArray的后续逻辑都写在此处
  } catch (err) {
    console.error('数据获取失败:', err)
  }
}

// 执行入口
mainLogic()

注意:所有依赖locationArray的业务逻辑必须放在异步回调、then回调或者await语句之后执行,不能在全局作用域下同步读取,这是JS事件循环的执行规则决定的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:06:03