uni-app uniCloud.getTempFileURL 无效,fileID过长问题

uni-app uniCloud.getTempFileURL 无效,fileID过长问题

示例代码:

'use strict';  
exports.main = async (event, context) => {  
    //event为客户端上传的参数  
    let result =  uniCloud.getTempFileURL({  
        fileList: ['cloud://txtest511861636-1dd097.7478-txtest511861636-1dd097-1302270193/test-admin.jpeg']  
    });  
    result.then(res=>{  
        console.log(res)  
    })  
    let result2 =  uniCloud.getTempFileURL({  
        fileList: ['cloud://test-28farb/a.png']  
    });  
    result2.then(res=>{  
        console.log(res)  
    })  
    //返回数据给客户端  
    return event  
};
00:11:18.520 [本地运行:腾讯云:txtest511861636]本地运行云函数【test】...  
00:11:18.520 [本地运行:腾讯云:txtest511861636]运行日志:  
00:11:20.296 [本地运行]"云函数[test]执行结果:" {}   
00:11:20.450 [本地运行]{"fileList":Array(1),"requestId":"17803285d5a_2"} uniCloud-tcb/cloudfunctions/test/index.js:14:10  
00:11:21.170 [本地运行:腾讯云:txtest511861636]运行状态:成功

操作步骤:

见代码示例

预期结果:

打印result 和result 2的返回值

实际结果:

只打印了result 2的返回值

bug描述:

uniCloud.getTempFileURL 无效; fileID过长 ?详见代码示例


更多关于uni-app uniCloud.getTempFileURL 无效,fileID过长问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

如果不熟悉promise 可以换成 async+await 的方式 await MDN

更多关于uni-app uniCloud.getTempFileURL 无效,fileID过长问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的代码和日志分析,问题在于异步处理逻辑。uniCloud.getTempFileURL返回的是Promise,但你在云函数中直接返回了event,没有等待这两个异步操作完成。

从日志可以看到:

  • 云函数执行结果先返回了空对象{}
  • 随后才打印了result2的结果
  • result1完全没有输出

这是因为云函数在return event时就结束了执行,此时result1的Promise可能还在pending状态。

解决方案:

使用await等待所有异步操作完成:

exports.main = async (event, context) => {  
    let result1 = await uniCloud.getTempFileURL({  
        fileList: ['cloud://txtest511861636-1dd097.7478-txtest511861636-1dd097-1302270193/test-admin.jpeg']  
    });  
    console.log('result1:', result1);
    
    let result2 = await uniCloud.getTempFileURL({  
        fileList: ['cloud://test-28farb/a.png']  
    });  
    console.log('result2:', result2);
    
    return {
        result1,
        result2
    };
};

或者使用Promise.all并行处理:

exports.main = async (event, context) => {  
    const [result1, result2] = await Promise.all([
        uniCloud.getTempFileURL({
            fileList: ['cloud://txtest511861636-1dd097.7478-txtest511861636-1dd097-1302270193/test-admin.jpeg']
        }),
        uniCloud.getTempFileURL({
            fileList: ['cloud://test-28farb/a.png']
        })
    ]);
    
    console.log('result1:', result1);
    console.log('result2:', result2);
    
    return { result1, result2 };
};
回到顶部