uni-app中onLoad执行uniCloud云对象导致白屏2秒后闪退崩溃

发布于 1周前 作者 eggper 来自 Uni-App

uni-app中onLoad执行uniCloud云对象导致白屏2秒后闪退崩溃

开发环境 版本号 项目创建方式
Windows 22000.2295 HBuilderX 3.97

示例代码:

uvue页面

<template>  
    <view>  

    </view>  
</template>  

<script>  
let api = uniCloud.importObject('api')  
export default {  
    data() {  
        return {  

        }  
    },  
    onLoad() {  
        this.init()  
    },  
    methods: {  
        init(){  
            api.ceshi()  
        }  
    }  
}  
</script>  

<style>  

</style>

云对象

module.exports = {  
    _before: function () {  

    },  
    ceshi(){  
        return { code: '200', data: 'data' }  
    },  
}

9 回复

HBuilderX 3.98.2023112011-alpha 已修复。


感谢告知,谢谢

麻烦回复下我提的问题

同同样的问题呢

其实是showLoading api在onReady之前调用的问题。下版修复。 云对象默认调用了showloading。customUI关闭loading可以临时使用。

谢谢告知,感谢

请官方确认下这个bug呗

uni-app 中使用 uniCloud 云对象时,如果在 onLoad 生命周期中执行云对象调用,可能会导致页面白屏或闪退的问题。这通常是由于云对象调用耗时较长,导致页面渲染被阻塞,或者云对象调用失败导致应用崩溃。

以下是一些可能的原因和解决方案:


1. 云对象调用耗时过长

  • 原因onLoad 是页面加载时触发的生命周期,如果云对象调用耗时较长,可能会导致页面渲染被阻塞,出现白屏。

  • 解决方案

    • 将云对象调用放到 onReadyonShow 生命周期中,确保页面已经渲染完成后再执行耗时操作。
    • 使用异步操作(如 async/await)避免阻塞主线程。
    • 在调用云对象时显示加载提示(如 uni.showLoading),提升用户体验。
    onReady() {
      this.fetchData();
    },
    methods: {
      async fetchData() {
        uni.showLoading({ title: '加载中...' });
        try {
          const res = await uniCloud.callFunction({ name: 'yourCloudFunction' });
          console.log(res);
        } catch (error) {
          console.error('云对象调用失败', error);
        } finally {
          uni.hideLoading();
        }
      }
    }

2. 云对象调用失败

  • 原因:云对象调用失败(如网络问题、云函数错误等)可能导致应用崩溃。

  • 解决方案

    • 在调用云对象时添加 try-catch 捕获异常,避免应用崩溃。
    • 检查云函数的逻辑,确保其正确性和健壮性。
    • 在开发阶段,使用 uniCloud 控制台查看云函数的日志,排查问题。
    async fetchData() {
      try {
        const res = await uniCloud.callFunction({ name: 'yourCloudFunction' });
        console.log(res);
      } catch (error) {
        console.error('云对象调用失败', error);
        uni.showToast({ title: '加载失败,请重试', icon: 'none' });
      }
    }

3. 页面渲染依赖云对象数据

  • 原因:如果页面渲染依赖于云对象返回的数据,而数据未及时返回,可能导致页面白屏。

  • 解决方案

    • 在页面中使用 v-ifv-show 控制渲染,确保数据加载完成后再显示内容。
    • 提供默认值或占位符,避免页面空白。
    <template>
      <view v-if="dataLoaded">
        <!-- 页面内容 -->
      </view>
      <view v-else>
        <text>加载中...</text>
      </view>
    </template>
    
    <script>
    export default {
      data() {
        return {
          dataLoaded: false,
          data: null
        };
      },
      async onReady() {
        await this.fetchData();
        this.dataLoaded = true;
      },
      methods: {
        async fetchData() {
          try {
            const res = await uniCloud.callFunction({ name: 'yourCloudFunction' });
            this.data = res.result;
          } catch (error) {
            console.error('云对象调用失败', error);
          }
        }
      }
    };
    </script>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!