uni-app 云对象返回数字字符串时会被转换成数字

uni-app 云对象返回数字字符串时会被转换成数字

操作步骤:

module.exports = {  
    createOrder() {  
        return "111"  
    }  
}

前端

const orderCo = uniCloud.importObject('order')  
const createOrder = async () => {  
    let order_no = await orderCo.createOrder()  
    console.log('order_no:', order_no)  
}

预期结果:

不管是连接本地云函数时还是连接云端云函数环境,前端输出的结果都应该是"111"

实际结果:

连接本地云函数环境时,前端输出的是"111" 连接云端云函数环境时,前端输出的是111

bug描述:

调用云对象的方法,让云对象返回一个由数字组成的字符串。但是测试发现连接云端云函数环境时,前端收到的数据就会变成数字类型。


更多关于uni-app 云对象返回数字字符串时会被转换成数字的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

不要直接返回字符串,你应该返回一个对象,对象里面有个属性.这个属性的值是字符串,如 return {
data: “111”
}

更多关于uni-app 云对象返回数字字符串时会被转换成数字的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我后来就是这么做的,只是不清楚为什么就不能直接返回数字字符串。

回复 5***@qq.com: 因为返回结果会强制进行一次 JSON.parse(data) 所以 JSON.parse(“111”) 就是数字的111

在使用 uni-app 的云对象(Cloud Object)时,如果你从云函数返回一个数字字符串(例如 "123"),在某些情况下,它可能会被自动转换为数字类型(例如 123)。这是因为云函数的返回值在传输过程中可能会经过序列化和反序列化处理,而 JSON 序列化处理时会将数字字符串转换为数字。

示例

假设你有一个云对象方法,返回一个数字字符串:

module.exports = {
  async getNumberString() {
    return "123"; // 返回字符串 "123"
  }
}

在客户端调用时:

const cloudObj = uniCloud.importObject('yourCloudObjectName');
const result = await cloudObj.getNumberString();
console.log(typeof result); // 可能输出 "number" 而不是 "string"

解决方法

如果你需要确保返回值是字符串类型,可以通过以下方式处理:

  1. 在返回值中明确指定类型
    返回一个对象,并在对象中明确指定类型:

    module.exports = {
      async getNumberString() {
        return { value: "123", type: "string" }; // 返回对象,明确类型
      }
    }
    
  2. 在客户端手动转换类型
    在客户端接收到返回值后,手动将其转换为字符串:

    const cloudObj = uniCloud.importObject('yourCloudObjectName');
    const result = await cloudObj.getNumberString();
    const stringResult = String(result); // 手动转换为字符串
    console.log(typeof stringResult); // 输出 "string"
    
  3. 在云函数中返回 JSON 字符串
    返回一个 JSON 字符串,这样在反序列化时不会改变类型:

    module.exports = {
      async getNumberString() {
        return JSON.stringify("123"); // 返回 JSON 字符串
      }
    }
    

    客户端调用时解析 JSON:

    const cloudObj = uniCloud.importObject('yourCloudObjectName');
    const result = await cloudObj.getNumberString();
    const stringResult = JSON.parse(result); // 解析 JSON 字符串
    console.log(typeof stringResult); // 输出 "string"
回到顶部