1、开发服务卡片时,已经可以使用静态数据并显示在服务卡片中。
2、在继承了FormExtensionAbility的EntryFormAbility中,分别在onAddForm和onUpdateForm方法中,使用http请求数据来替换静态数据时,由于http请求方法为异步方法,请求未响应的情况onAddForm和onUpdateForm方法都执行结束了。
3、onAddForm和onUpdateForm方法又不允许使用async+await的方式,提示异常。
4、还有什么样的方式可以对http异步请求的数据发送到卡片中。或者是能在EntryFormAbility中解决异步方法的问题?
代码示例:
onFormEvent(formId: string, message: string) {
console.log('onFormEvent');
// Called when a specified message event defined by the form provider is triggered.
let params: param = {
id: '9764',
}
NEW_POST('url', params).then(res => {
console.info('onFormEvent-data', res.code, res.result, res.data.lngId, JSON.stringify(res.data));
const jsonArray = JSON.parse(res.data) as result[];
let obj: Record<string, string|string[]> = {
'test': '测试2',
'titleC': jsonArray.map((item) => item.titleC)
};
let formData = formBindingData.createFormBindingData(obj);
formProvider.updateForm(formId, formData)
console.log('onFormEvent-success');
})
}
这里的异步请求并不会导致卡片不刷新,因为你的刷新方法是写在回调里面的。
最有可能是因为:
FormExtensionAbility进程不能常驻后台,即在卡片生命周期回调函数中无法处理长时间的任务,在生命周期调度完成后会继续存在5秒,如5秒内没有新的生命周期回调触发则进程自动退出。
针对可能需要5秒以上才能完成的业务逻辑,建议拉起主应用进行处理,处理完成后使用updateForm通知卡片进行刷新。
针对网络请求刷新卡片,这边建议拉起主应用进行处理。
相关文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-ui-widget-event-call-V5\#开发步骤
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-ui-widget-event-uiability-V5\#通过call事件刷新卡片内容
首次创建卡片的时的初始化数据,可以通过下面的方式来刷新:
首先:在card.page页面
然后,在formAbility里面
通过更新time,监听到数据变化后,回调EntryAbility,请求网络数据,再更新卡片内容。同样,该方式也可用在,onUpdateForm定时刷新中。