imengyu
imengyu
  • 发布:2025-07-15 16:10
  • 更新:2025-07-16 10:56
  • 阅读:48

【报Bug】uts兼容模式插件 组件函数返回值无效 永远返回数字0

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows10

HBuilderX类型: 正式

HBuilderX版本号: 4.75

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: 模拟器

手机机型: 雷电模拟器

页面类型: nvue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uts组件

//原生提供以下属性或方法的实现  
export default {  
    name: "test-function",  
    props: {  
      "buttontext": {  
        type: String,  
        default: "原生按钮"  
      }  
    },  
    data() {  
      return {}  
    },  
    expose: ['getResult','getString', 'getMap'],  
    methods: {  

      //uts返回值测试  
      getResult(a: number, b: number) : number {  
        return a + b;  
      },  
      getString() : string {  
        return "返回字符串";  
      },  
      getMap() : Map<string, string|number> {  
        let headerMap = new Map<string, string|number>();  
        headerMap.set("number", 22);  
        headerMap.set("string", "返回字符串");  
        return headerMap;  
      },  
    }  
}

js 调用

export default {  
  methods: {  
      test() {  
        //实际获取返回值都是0  
        console.log('应该返回10', this.$refs.nativeComp.getResult(2, 8));  
        console.log('应该返回字符串aaa', this.$refs.nativeComp.getString());  
        console.log('应该返回一个map', this.$refs.nativeComp.getMap());  
      },  
  }  
}

操作步骤:

运行项目,然后点击logo调用 test 函数,查看控制台中的返回值。

预期结果:

getResult 应该返回数字10
getString 应该返回字符串'aaa'
getMap 应该返回一个map

实际结果:

getResult 返回数字0
getString 返回数字0
getMap 返回数字0

bug描述:

使用uts兼容模式插件创建一个组件,并暴露函数给js调用,调用正常,但是uts侧函数返回值无效,无论uts返回什么东西,js永远接收一个数字0 !

创建一个全新项目,用HBuilder 创建一个uts兼容模式插件,测试依然有问题。测试代码已经放在附件中。

2025-07-15 16:10 负责人:无 分享
已邀请:
1***@163.com

1***@163.com

export default {    
  methods: {    
      test() {    
        //实际获取返回值都是0    
const sum =  this.$refs.nativeComp.getResult(2, 8)  
        console.log('应该返回10', sum);    
        console.log('应该返回undefined 或者报错', this.$refs.nativeComp.getString111111());    
        console.log('应该返回一个map', this.$refs.nativeComp.getMap());    
      },    
  }    
}

这样试试看呢

  • imengyu (作者)

    这样也不行

    2025-07-15 17:48

  • 1***@163.com

    回复 imengyu: 那问题在this.$refs.nativeComp

    2025-07-15 17:58

  • imengyu (作者)

    回复 1***@163.com: 不是这个。调用函数正常,uts也可以执行,但是就是返回值无效

    2025-07-16 09:03

imengyu

imengyu (作者)

试了一下也不能传递回调函数,直接就调用不了,没反应。 没加回调函数的就可以正常调用!

这样我怎么获取原生操作的结果?返回值也不能用,回调函数也不能用。他只能调用不能获取返回值

UTS代码:

type MyApiOptions = {  
    param: number,  
    success: () => void,  
    fail: (e: string) => void,  
}  

testPassPure(param: number) {  
    console.log('testPassPure', param)  
},  
testPassObject(obj: UTSJSONObject) {  
   console.log('testPassObject',   
      'param:', obj.getNumber('param'),   
      'str:', obj.getString('str')  
   );  
},  
testPassObject3(obj: TestData) {  
        console.log('testPassObject',   
          'param:', obj.param,   
          'str:', obj.str  
        );  
},  
testPassObject2(options: MyApiOptions) {  
    console.log('testPassObject2', options.param);  
    options.success();  
},  
testPassCallbackFunction(fun: () => void) {  
    console.log('testPassFunction')  
    fun();     
},

调用:

this.$refs.nativeComp.testPassPure(1) //有用  
this.$refs.nativeComp.testPassObject({  
    param: 12,  
    str: '123',  
})  //有用  
this.$refs.nativeComp.testPassObject2({  
    param: 12,  
    success() {  
      console.log('callback');  
    }  
})  //没用,调用没反应  
this.$refs.nativeComp.testPassFunction(() => {  
    console.log('callback');  
})  //没用,调用没反应

原来以为是腿瘸了,拄拐还能走。结果是下半身截肢!垃圾

要回复问题请先登录注册