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

如何访问axios.get的Promise回调内变量并插入Postgres数据库

问题根源
  • axios.get 是异步请求,JS引擎不会等待请求返回结果就会直接执行后续的 InsertToDataBase.insertdatatolamp0 代码,此时你要的rn0、ty0还没有被赋值
  • 你在then回调内部用var声明的rn0、ty0是函数作用域变量,仅在回调内部可访问,外部默认无法读取
解决方案

方案1:直接在then回调内执行入库操作

这是改动最小的实现方式,拿到异步返回结果后直接调用插入方法:

const axios = require('axios')
const InsertToDataBase = require("./InsertToDataBase");
const username = 'admin'
const password = 'admin'
const token = Buffer.from(`${username}:${password}`, 'utf8').toString('base64')
const urlLAMP_0 = 'http://127.0.0.1:8282/~/mn-cse/mn-name/LAMP_0/DATA/la'
const urlLAMP_1 = 'http://localhost:8282/~/mn-cse/mn-name/LAMP_1/DATA/la'
function getDataLAMP_0(){
  axios.get(urlLAMP_0, {
    headers: {
      'Access-Control-Allow-Credentials': 'true',
      'Access-Control-Allow-Origin':'*',
      "X-M2M-RI":"OM2M-webpage",
      'Authorization': `Basic ${token}`,
      'Accept': 'application/json',
      'mode': 'cors',
      'credentials': 'include',
      }
  })
  .then(function(response) {
        const cinData = response.data['m2m:cin']
        document.getElementById("rn0").textContent = cinData.rn;
        const rn0 = cinData.rn;
        document.getElementById("ty0").textContent = cinData.ty;
        const ty0 = cinData.ty;
        document.getElementById("ri0").textContent = cinData.ri;
        document.getElementById("pi0").textContent = cinData.pi;
        document.getElementById("ct0").textContent = cinData.ct;
        document.getElementById("lt0").textContent = cinData.lt;
        document.getElementById("st0").textContent = cinData.st;
        document.getElementById("cnf0").textContent = cinData.cnf;
        document.getElementById("cs0").textContent = cinData.cs;
        document.getElementById("con0").textContent = cinData.con;
        // 拿到数据后直接调用插入方法
        InsertToDataBase.insertdatatolamp0(rn0,ty0);
  })
}
getDataLAMP_0();

方案2:用async/await语法优化异步逻辑

如果后续需要对返回数据做更多处理,用async/await语法逻辑更清晰,可读性更高:

const axios = require('axios')
const InsertToDataBase = require("./InsertToDataBase");
const username = 'admin'
const password = 'admin'
const token = Buffer.from(`${username}:${password}`, 'utf8').toString('base64')
const urlLAMP_0 = 'http://127.0.0.1:8282/~/mn-cse/mn-name/LAMP_0/DATA/la'
const urlLAMP_1 = 'http://localhost:8282/~/mn-cse/mn-name/LAMP_1/DATA/la'

// 声明为async异步函数
async function getDataLAMP_0(){
  // 等待请求返回结果
  const response = await axios.get(urlLAMP_0, {
    headers: {
      'Access-Control-Allow-Credentials': 'true',
      'Access-Control-Allow-Origin':'*',
      "X-M2M-RI":"OM2M-webpage",
      'Authorization': `Basic ${token}`,
      'Accept': 'application/json',
      'mode': 'cors',
      'credentials': 'include',
      }
  })
  const cinData = response.data['m2m:cin']
  document.getElementById("rn0").textContent = cinData.rn;
  const rn0 = cinData.rn;
  document.getElementById("ty0").textContent = cinData.ty;
  const ty0 = cinData.ty;
  document.getElementById("ri0").textContent = cinData.ri;
  document.getElementById("pi0").textContent = cinData.pi;
  document.getElementById("ct0").textContent = cinData.ct;
  document.getElementById("lt0").textContent = cinData.lt;
  document.getElementById("st0").textContent = cinData.st;
  document.getElementById("cnf0").textContent = cinData.cnf;
  document.getElementById("cs0").textContent = cinData.cs;
  document.getElementById("con0").textContent = cinData.con;
  // 返回需要的数据供外部使用
  return {rn0, ty0}
}

// 用自执行异步函数等待数据返回后执行入库操作
(async () => {
  const {rn0, ty0} = await getDataLAMP_0()
  InsertToDataBase.insertdatatolamp0(rn0,ty0);
})()
注意事项

如果你的代码运行在前端浏览器环境,直接连接PostgreSQL属于高危操作,会明文暴露数据库账号密码等敏感信息,建议把数据库操作迁移到后端服务,前端仅调用后端封装好的入库接口完成操作。


内容的提问来源于stack exchange,提问作者Badr-Eddine El mostaine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:36:05