Call Apex Imperatively

DEX475 - Call Apex Methods

📄 第 311 页 🎬 视频课程

课程章节介绍

大家好,今天我们来聊聊什么时候必须用命令式的Apex调用,以及怎么用好它。 咱们都知道,用@wire装饰器可以自动获取数据,但它有个特点:组件一加载就会执行,而且数据是通过流的方式持续推送的。可有时候,我们需要自己对调用的时机做精确控制,比如只有用户点了按钮才去请求数据。这时候就得用命令式的Apex调用了。 命令式调用会返回一个Promise,而且这个Promise只解决一次,不像@wire那样持续提供数据。那么,哪些场景必须用命令式调用呢?主要有四种: 第一种,要调用的Apex方法是不允许缓存的,比如所有涉及增、删、改的操作,像创建记录、更新数据这些,咱们都叫它TLR操作,必须用命令式。 第二种,你需要显式控制调用的时机。刚才说了,点按钮才查数据,或者表单提交时才保存,这些都得靠命令式。 第三种,Salesforce里有些标准对象是不受@wire支持的,最典型的就是Task和Event,要用它们的数据,只能走命令式。 第四种,你的代码不是写在Lightning组件里,而是普通的ES 6模块中,那个模块没有扩展LightningElement,自然没法用@wire,这也得靠命令式调用。 现在写这类调用,推荐用现代标准的 async/await 语法,再配上 try/catch 来捕获错误。写法清晰,逻辑也直观。参数传递跟@wire的规则一样,把参数包在一个普通的对象里传过去就行。 但要特别注意一个坑,千万别用JavaScript的Map对象来组装参数再传给Apex。如果你启用了LWS(Lightning Web Security),用Map传参会直接失败。记住,要用普通的JavaScript对象,花括号那种。 错误处理上,如果用async/await,就在catch块里处理;如果还用老式的Promise链,就在.catch方法里处理。不过要注意,.catch不仅能抓住Apex方法体本身抛出的错误,还能抓住前面.then处理函数里产生的异常,所以别漏了。 好了,这几条原则记牢,你就能安全、高效地使用命令式Apex调用了。下节课咱们继续深入。

关键词

LWC Lightning Web Components Salesforce