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

Alpine.js getter方法未等待异步请求完成致INPUT值为NaN

问题与解决方案

问题原因

输入框显示NaN是因为Alpine Store的ri_total getter在异步请求获取汇率数据前就执行了:初始时xe是数值0,访问xe.usd2inr会得到undefined,计算250 * undefined结果为NaN,最终格式化后还是NaN。


解决方案

方案1:给初始值设置默认汇率并手动触发刷新

给xe设置包含usd2inr属性的初始对象,避免访问undefined,同时在获取到汇率后手动通知Alpine刷新Store:

// 初始设置默认汇率,比如0或者当前合理的参考值
let xe = { usd2inr: 0 };

const get_usd2inr = async () => {
    return await fetch(BASE_URL + "api/usd")
    .then(response => response.json());
}

document.addEventListener("DOMContentLoaded", async () => {
    xe = await get_usd2inr();
    // 手动触发Store刷新,让getter重新计算值
    Alpine.store('local_data').$refresh();
});

Alpine.store('local_data', {
    get ri_total() {
        let usd2inr = xe.usd2inr;
        let total = parseFloat(250 * usd2inr).toFixed(2);        
        const formatedNumber = new Intl.NumberFormat('en-IN', { currency: 'INR' }).format(total);
        return formatedNumber;
    }
});

方案2:将汇率状态移入Alpine Store(推荐)

把汇率数据放到Store内部,利用Alpine的响应式特性自动更新,无需手动刷新:

const get_usd2inr = async () => {
    return await fetch(BASE_URL + "api/usd")
    .then(response => response.json());
}

document.addEventListener("DOMContentLoaded", async () => {
    const rateData = await get_usd2inr();
    Alpine.store('local_data').xe = rateData;
});

Alpine.store('local_data', {
    // 初始默认汇率
    xe: { usd2inr: 0 },

    get ri_total() {
        let usd2inr = this.xe.usd2inr;
        let total = parseFloat(250 * usd2inr).toFixed(2);        
        const formatedNumber = new Intl.NumberFormat('en-IN', { currency: 'INR' }).format(total);
        return formatedNumber;
    }
});

方案3:添加加载状态(可选)

如果需要在数据加载完成前给用户提示,可以修改HTML做条件渲染:

<input
    type="text" id="ri-total"
    :value="$store.local_data.xe.usd2inr === 0 ? '加载中...' : $store.local_data['ri_total']"
    x-mask-x:dynamic="$money($input)"
    readonly    
/>

也可以直接显示0,根据需求调整提示内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:51:25