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

JavaScript Promise使用疑问:axios请求后response_status变量不更新如何解决?

问题原因

axios发送请求是异步操作,JS主线程不会等待请求返回结果再执行后续代码:

  • 你定义的response_status初始值为true
  • 执行到axios.post时,请求会被放到后台执行,主线程会直接继续往下走,走到最后return response_status
  • 等到请求返回触发then/catch回调时,函数早就已经返回结果了,此时修改response_status已经不会影响之前的返回值,所以你拿到的永远是初始的true。
修复方案

现在主流方案是用async/await语法处理异步逻辑,可读性更高,修改后的代码如下:

import axios from 'axios/dist/axios.min.js';

// 给函数添加async关键字标记为异步函数
async function addOrRemoveFavourite(variation_id, isFav) {
    let response_status = true;

    if (typeof variation_id == 'undefined' || typeof isFav == 'undefined') {
        return false;
    }

    const data = {
        product_variation: variation_id
    };

    try {
        // 用await等待请求执行完成,再走后续逻辑
        if (isFav) {
            await axios.post('/api/product/remove-from-favourite', data);
        } else {
            await axios.post('/api/product/add-to-favourite', data);
        }
    } catch (error) {
        if (error.response) {
            alert(error.response.data.message);
            response_status = false;
        }
    }

    return response_status;
}

// 调用时需要用await(外层必须也是async函数)或者then回调拿结果
// 方式1:async/await调用
async function handleFav() {
    const response = await addOrRemoveFavourite(49, true);
    console.log(response); // 此时可以拿到正确的状态
}
handleFav();

// 方式2:then回调调用
addOrRemoveFavourite(49, true).then(response => {
    console.log(response);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:24:04