uni-app IOS手机端出现Waiting to navigate to: /pages/xx, do not operate continuously: /pages/aa. __ERROR

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

uni-app IOS手机端出现Waiting to navigate to: /pages/xx, do not operate continuously: /pages/aa. __ERROR
在H5调试没有问题,但是在APP里运行,反复了点击几个页面跳转后,会出现报错Waiting to navigate to: /pages/xxx/xxx, do not operate continuously: /pages/aaa/aaa. __ERROR,这时候页面所有路由跳转都会报错,并且无反应,只能关掉APP,重新打开才能正常

图片


11 回复

顶顶顶顶顶顶顶顶顶

我是在app内自定义编写的底部tabbar,在进行了三次tabbar页面切换后,就会出现这个问题

提供个精简后的复现工程,并说明 vue 和 HBuilderX 依赖版本和运行的平台。应用是安卓 ios 都有问题,还是部分平台、机型有问题?缩小下问题范围

也遇到一样的问题,非常诡异,HBuilderX升级到4.44,就这样了。今天换到4.45,也一样。

提供个精简后的复现工程,并说明 vue 和 HBuilderX 依赖版本和运行的平台。应用是安卓 ios 都有问题,还是部分平台、机型有问题?缩小下问题范围

我是因为本地导入了字体文件,所以导致这个问题出现

也遇到一样的问题,HBuilderX版本4.36。tabbar切换多几次就报错了,还会卡顿。

提供个精简后的复现工程,并说明 vue 和 HBuilderX 依赖版本和运行的平台。应用是安卓 ios 都有问题,还是部分平台、机型有问题?缩小下问题范围

我是因为本地导入了字体文件,所以导致这个问题出现

在uni-app开发中遇到“Waiting to navigate to: /pages/xx, do not operate continuously: /pages/aa. __ERROR”这类问题,通常是由于页面跳转逻辑处理不当或页面路由管理存在问题。这种问题在iOS设备上尤为明显,可能是因为iOS对页面跳转的处理更加严格。下面我将提供一个简单的代码示例,来展示如何优化页面跳转逻辑,以避免此类错误。

1. 检查页面跳转逻辑

确保在每次页面跳转前,前一个跳转请求已经完成或被取消。你可以通过设置一个标志位来控制是否允许进行页面跳转。

// 在Vue组件的data中定义一个标志位
data() {
    return {
        isNavigating: false // 控制页面跳转的标志位
    };
},
methods: {
    navigateToPage(pagePath) {
        if (!this.isNavigating) {
            this.isNavigating = true;
            uni.navigateTo({
                url: pagePath,
                success: () => {
                    // 跳转成功后重置标志位
                    this.isNavigating = false;
                },
                fail: () => {
                    // 跳转失败时重置标志位,并处理错误
                    this.isNavigating = false;
                    console.error('Failed to navigate to', pagePath);
                }
            });
        } else {
            console.warn('Navigation already in progress, please wait.');
        }
    }
}

2. 使用Promise或async/await管理异步跳转

如果你需要在跳转前后执行异步操作,可以使用Promise或async/await来确保操作的顺序性。

methods: {
    async navigateWithCheck(pagePath) {
        if (!this.isNavigating) {
            this.isNavigating = true;
            try {
                // 执行任何必要的异步操作
                await someAsyncOperation();
                await uni.navigateTo({
                    url: pagePath,
                    success: () => {
                        this.isNavigating = false;
                    },
                    fail: (err) => {
                        this.isNavigating = false;
                        console.error('Navigation failed:', err);
                    }
                });
            } catch (error) {
                this.isNavigating = false;
                console.error('Operation failed before navigation:', error);
            }
        } else {
            console.warn('Navigation already in progress.');
        }
    }
}

总结

以上代码示例展示了如何通过设置一个标志位来控制页面跳转的并发性,以及如何使用Promise或async/await来管理异步操作。这些方法可以帮助你避免在uni-app开发中遇到由于快速连续点击导致的页面跳转错误。在实际项目中,根据具体需求调整这些逻辑,以确保应用的稳定性和用户体验。

回到顶部