开发UTS鸿蒙插件,如何向插件传递异步函数参数。目前传递异步函数,在鸿蒙中无法识别,拿到的是一个空对象。
若无法传递异步函数参数,是否有其他解决方案?
目前尝试从鸿蒙端向外传递函数也是不行的。
// vue页面,调用鸿蒙uts插件
uni.xxx({
beforeConfirm: async () => {
return new Promise(resolve => {
// 异步耗时操作
setTimeout(resolve, 3000);
});
}
})
// 鸿蒙uts插件函数
export function xxx(params: ESObject) {
params.beforeConfirm().then(() => {
// 后续业务
})
}
月影银翔 (作者)
已上传,请查看
2025-07-23 16:02
DCloud_UNI_yuhe
回复 月影银翔: 理解你的问题了,现在vue和uts中执行在两个不同环境中,因此这么传递参数是有问题,暂时不支持这么传递
2025-07-23 16:28
月影银翔 (作者)
回复 DCloud_UNI_yuhe: 是否有其他方案可以实现呢?
2025-07-23 16:52
DCloud_UNI_yuhe
回复 月影银翔: 什么场景下一定得传个promise?
2025-07-23 16:53
月影银翔 (作者)
回复 DCloud_UNI_yuhe: 我尝试在uts中向beforeConfirm丢一个函数出去,由外部调用,但貌似也不支持。
2025-07-23 16:53
DCloud_UNI_yuhe
回复 月影银翔: 不能定义在 vue 或者uts中调用吗?
2025-07-23 16:53
月影银翔 (作者)
回复 DCloud_UNI_yuhe: 对话框,点击确认按钮后,需要去调用接口,接口调用成功后才允许关闭对话框
2025-07-23 16:53
DCloud_UNI_yuhe
回复 月影银翔: 调用接口看起来不一定非得把promise传过去吧。执行后传结果不行吗?
2025-07-23 16:54
月影银翔 (作者)
回复 DCloud_UNI_yuhe: 那对话框如何等待呢?
2025-07-23 16:55
DCloud_UNI_yuhe
回复 月影银翔: 鸿蒙原生还提供了一些拦截的 API,例如onWillDismiss,也可以拦截关闭
2025-07-23 17:01
月影银翔 (作者)
回复 DCloud_UNI_yuhe: 可是核心问题还是在于,如何在vue的beforeConfirm中通知uts端告知其不允许关闭。除非单独再写个uts函数,由vue端手动调用关闭,但感觉这样设计并不合理
2025-07-23 17:04
DCloud_UNI_yuhe
回复 月影银翔: uts 端不允许关闭看起来也不应该通过promise控制,还是得通过鸿蒙 API 控制的
2025-07-23 17:07
月影银翔 (作者)
回复 DCloud_UNI_yuhe: 实际代码应该是这样的 beforeConfirm().then(res => { if(!res) return; this.uiContent?.getPromptAction()?.closeCustomDialog(this.componentContent); })。
2025-07-23 17:12