uni-app 微信小程序 uni.login({success: (res) => { // res返回很慢 }})

uni-app 微信小程序 uni.login({success: (res) => { // res返回很慢 }})

如题

实测 苹果14 15 uni.login 登录后返回数据很慢,安卓和苹果12以下机型没问题

还有想问下uni.login是同步还是异步? 掉完直接走succee吗?苹果1415 和安卓表现不一样 返回顺序不一样

开发环境 版本号 项目创建方式
微信小程序 @dcloudio/uni-mp-weixin: 3.0.0-3080720230703001 -

更多关于uni-app 微信小程序 uni.login({success: (res) => { // res返回很慢 }})的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 微信小程序 uni.login({success: (res) => { // res返回很慢 }})的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app开发微信小程序时,uni.login是用于获取用户的临时登录凭证(code)的API,这个code通常用于后续换取用户的openid和session_key。确实,在某些情况下,uni.login的回调可能会比较慢,这通常是由于网络延迟或微信服务器的响应速度造成的。尽管我们不能直接加速微信服务器的响应,但我们可以优化代码结构,以便在等待uni.login响应期间进行其他操作,或者更好地处理异步流程。

下面是一个改进后的代码示例,它展示了如何使用Promise和async/await来处理uni.login的异步调用,并在等待期间执行一些其他操作或显示加载提示,以提高用户体验。

使用Promise处理

function login() {
    return new Promise((resolve, reject) => {
        uni.login({
            success: (res) => {
                // 假设这里我们只需要code
                resolve(res.code);
            },
            fail: (err) => {
                reject(err);
            }
        });
    });
}

// 调用login函数并处理结果
login()
    .then((code) => {
        console.log('登录成功,获得的code为:', code);
        // 这里可以发起网络请求,用code换取openid和session_key
    })
    .catch((err) => {
        console.error('登录失败:', err);
    });

使用async/await处理

async function handleLogin() {
    try {
        const code = await new Promise((resolve, reject) => {
            uni.login({
                success: (res) => {
                    resolve(res.code);
                },
                fail: (err) => {
                    reject(err);
                }
            });
        });

        console.log('登录成功,获得的code为:', code);
        // 显示加载提示(例如使用uni.showLoading)
        uni.showLoading({ title: '正在登录...' });

        // 模拟网络请求(这里应该使用实际的网络请求API)
        setTimeout(() => {
            // 假设我们已经用code换取了openid和session_key
            console.log('已用code换取openid和session_key');
            // 隐藏加载提示
            uni.hideLoading();
        }, 2000); // 模拟2秒的请求时间

    } catch (err) {
        console.error('登录失败:', err);
        // 处理错误,例如显示错误提示
        uni.showToast({ title: '登录失败,请重试', icon: 'none' });
    }
}

// 调用handleLogin函数
handleLogin();

以上代码展示了如何使用Promise和async/await来处理uni.login的异步调用,并在等待期间执行其他操作或显示加载提示。这样做可以提高应用的响应性和用户体验。

回到顶部