刚做的一个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来刷新,不是太可靠。