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

如何将Axios请求返回值赋值给变量并在后续代码中正常访问

问题原因

你的代码存在几个异步逻辑和变量使用错误,直接导致无法拿到正确的返回值:

  • postData 虽然声明为async函数,但没有返回axios请求的Promise,await postData() 实际等待的是undefined,自然拿不到返回的assessmentId
  • 路由里你把调用postData的逻辑套在了一个独立的立即执行async函数里,代码不会等待这个函数执行完毕就直接执行了后面的res.send,此时异步请求还没完成,assessmentId还没被赋值
  • 变量名多处不匹配:一是postData的形参写的是大写URL,函数内部用的是小写url;二是最后res.send里写的是全小写assessmentid,和你定义的驼峰assessmentId大小写不匹配,JavaScript大小写敏感,就算前面拿到值这里也会报错
  • 调用postData时传参错误,你定义的postData需要5个入参,实际调用时只传了4个,还用到了未定义的jobTitle1变量

修正后的代码

修正postData函数

async function postData (first_name,last_name, email, url, token) {
  var data = {
      "assessmentStatusWebHook": "http://localhost:3000/api/hook",
      "notifyAssessmentAvailableUsingEmail": 1,
      "firstName": first_name,
      "lastName": last_name,
      "email": email
  }
  // 这里要return axios的返回值,async函数才会返回正确的Promise
  return axios.post(url, data, {headers: {'Accept': 'application/json'}})
  .then((res) => {
      console.log(`Status: ${res.status}`);
      return res.data.assessmentId
  }).catch((err) => {
      console.error(err);
      throw err // 把错误抛出去,上层才能catch到
  });
};

修正路由逻辑

router.post("/send_tests",  [
check('partner_test_id').exists(),
check('first_name').exists().isString(),
check('last_name').exists().isString(),
check('resume_url').optional(),
check('phone_number').optional().isString(),
check('email').exists().isEmail().normalizeEmail(),
check('url').exists().isString()], async (req, res) => {
    // 先校验参数,有错误直接返回,不用走后面的请求逻辑
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(422).json({ errors: errors.array() });
    }

    let partner_test_id = req.body.partner_test_id;
    let first_name = req.body.first_name;
    let last_name = req.body.last_name;
    let resume_url = req.body.resume_url;
    let phone_number = req.body.phone_number;
    let email = req.body.email;
    let url = req.body.url;
    // 这里如果有token从req里取,对应传给postData,不需要可以删除该参数
    let token = req.body.token || '';

    let assessmentId
    try {
      // 直接await即可,不需要额外套立即执行函数,路由本身已经是async的
      assessmentId = await postData(first_name,last_name, email, url, token)
    } catch (err){
      console.log ('Errorrrrrrr' + err)
      return res.status(500).json({error: '请求第三方接口失败'})
    }

    console.log("In the function for assessmentID " + assessmentId)
    res.send({
      // 变量名和上面保持一致,使用驼峰写法
      "partner_interview_id": assessmentId
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 14:39:03