uni-app 动态生成uni api报错

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

uni-app 动态生成uni api报错

操作步骤:

  • 按照描述里面的就可以复现

预期结果:

  • 应该是api正常运行才对

实际结果:

  • H5端直接
    TypeError: uni.chooseImage is not a function
    

bug描述:

let api = 'chooseMedia';  
// #ifndef H5  
    api = 'chooseMedia';  
// #endif  
// #ifdef H5  
    api = 'chooseImage';  
// #endif  
uni[api]({  
    count: 1,  
    mediaType: ['image']  
})

就是动态生成uni相关的api会报错。必须是以下形式才行

// #ifdef H5  
    uni.chooseImage({  
        count: 1,  
        sourceType: ["album"],  
    })  
// #endif  
// #ifndef H5  
    uni.chooseMedia({  
        count: 1,  
        mediaType: ['image']  
    })  
// #endif
信息项 详细信息
产品分类 uniapp/H5
PC开发环境 Mac
PC开发环境版本 14.6.1 (23G93)
浏览器平台 Chrome
项目创建方式 CLI
CLI版本号 3.0.0-alpha-4020320240703001

6 回复

你直接打印uni看看有没有那些方法,我动态写的跳转路由都是ok的


你好,我这里经过测试,没有发现相关问题,你看一下是否有其它的影响因素

uni build:h5 打包成H5项目再试试。我都是打包完之后报的错。

回复 i***@126.com: 你好,之前有用户已经反馈过了,他是使用uni[“navigatorTo”]时出现问题,与你这个类似,在打包时,这种写法把uni打包成一个静态的写法,我们暂时不会对这方面的打包做出调整,因为可能会影响其它开发者的别的打包写法。推荐你不要使用这种写法

回复 DCloud_UNI_yuhe: 好嘞,明白。

在处理 uni-app 中动态生成 uni API 调用时遇到的报错问题,通常是由于API调用方式不正确或参数传递有误导致的。下面我将提供一个简单的代码示例,展示如何在 uni-app 中正确地动态调用API,并处理可能的错误。

示例代码

假设我们想要动态调用 uni.request API,根据不同的URL和参数进行网络请求。

1. 定义一个函数来动态生成和调用 uni.request

function dynamicRequest(url, data) {
    return new Promise((resolve, reject) => {
        // 动态生成uni.request的调用
        uni.request({
            url: url,
            method: 'POST',
            data: data,
            success: (res) => {
                // 请求成功,解析响应数据
                if (res.statusCode === 200) {
                    resolve(res.data);
                } else {
                    reject(new Error(`Server error: ${res.statusCode}`));
                }
            },
            fail: (err) => {
                // 请求失败,处理错误
                reject(err);
            }
        });
    });
}

2. 使用该函数进行网络请求

// 示例URL和数据
const apiUrl = 'https://api.example.com/data';
const requestData = {
    key1: 'value1',
    key2: 'value2'
};

// 调用动态请求函数
dynamicRequest(apiUrl, requestData)
    .then(responseData => {
        console.log('请求成功:', responseData);
    })
    .catch(error => {
        console.error('请求失败:', error);
    });

错误处理

在上面的代码中,我们使用了 Promise 来处理异步请求,并在 uni.requestsuccessfail 回调中分别处理成功和失败的情况。这有助于清晰地分离请求逻辑和错误处理逻辑。

  • 成功处理:检查HTTP状态码,如果为200,则解析并返回响应数据。
  • 失败处理:无论是网络错误还是服务器错误,都通过 reject 函数抛出错误,以便在调用处进行捕获和处理。

注意事项

  • 确保 urldata 参数在调用 dynamicRequest 函数前是正确和有效的。
  • 在生产环境中,可能需要对请求进行更多的配置,如设置请求头、处理超时等。
  • 根据具体的API需求,调整请求方法和参数格式。

通过上述方式,你可以在 uni-app 中安全且有效地动态调用 uni API,并妥善处理可能出现的错误。

回到顶部