月影银翔
月影银翔
  • 发布:2025-07-23 12:01
  • 更新:2025-07-23 16:02
  • 阅读:263

开发UTS鸿蒙插件,如何向插件传递异步函数

分类:鸿蒙Next

开发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 12:01 负责人:无 分享
已邀请:
DCloud_UNI_yuhe

DCloud_UNI_yuhe

提供一下你写的代码,给一个可以运行的项目

  • 月影银翔 (作者)

    已上传,请查看

    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

月影银翔

月影银翔 (作者)

最小项目

要回复问题请先登录注册