Salesforce: wire的恼人之处
刚做的一个lwc,里面需要Account的数据,很自然想到用getRecord来做,这样就不需要apex:
@wire(getRecord, { recordId: '$accountId', fields: ACC_FIELDS }) getAccountData(result) { this.wiredAccountData = result; if (result.data) { this.badDebtStatus = getFieldValue(result.data, Bad_Debt_Status); ...... } }
需要刷新时,就用refreshApex(this.wiredAccountData); 来获得最新的Account数据。以为这就是“标准”的做法。
调试时却发现,首先,refreshApex是“异步”的。它不过是触发了wire方法,就算完成了任务,但是它不会等getAccountData完全执行完毕,再执行refreshApex的下一条语句。即使用refreshApex(this.wiredAccountData).then()也不行。没办法,只好加一个变量,先设成false,在getAccountData方法的末尾改成true,然后在refreshApex后,先检测这个变量是否为true,如不是,则用setTimeout延时重试。
而这样也没解决问题。调试发现,某些情况下,这个变量始终是false,不会变成true,也就是说getAccountData方法根本没有执行。
折腾了半天之后,只好放弃wire方法,改用apex来取Account数据,用lwc来调用。
感觉wire方法如果可以改变输入参数,它会自动更新数据,还比较方便。如果需要手工通过refreshApex来刷新,不是太可靠。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律