jasonDev
jasonDev
  • 发布:2024-06-11 17:14
  • 更新:2024-06-11 17:52
  • 阅读:122

uniapp, config.js里能做到发起一次网络请求,再把请求结果export吗?

分类:uni-app

难就难在必须等网络请求结束后,再把结果export。可是uni.request是异步的,程序总是先执行uni.request代码块后面的代码,等到网络请求有结果了,再执行success里的代码。而这不是我们程序想要的,没有请求到url,只能不停的转圈,可是这个功能似乎很难实现。有大佬知道怎么实现吗?谢谢!如下代码,并不能保证最后一个console.log最后执行,怎么办?谢谢大佬
// 定义一个函数,用于执行HTTP请求
async function fetchRequest(url, data = {}, method = "GET") {
return new Promise((resolve, reject) => {
uni.request({
url: url, // 服务器url
method: method, // HTTP请求方法
data: data, // 请求的参数
success: (res) => {
resolve(res.data); // 请求成功
},
fail: (err) => {
reject(err); // 请求失败
}
})
})
}

// 使用async函数调用
async function fetchData() {
try {
// 等待fetchRequest函数的结果
let result = await fetchRequest('https://example.com/api/data', {param: 'value'}, 'GET');
console.log('请求结果:', result);
// 可以继续处理result
} catch (error) {
console.error('请求失败:', error);
// 错误处理
}
}

// 调用fetchData,像处理同步请求一样处理结果
fetchData();
console.log("期望这里最后执行。可是每次运行结果都是,这一句先执行,怎么办?")

2024-06-11 17:14 负责人:无 分享
已邀请:
爱豆豆

爱豆豆 - 办法总比困难多

试试这两种方法 都能让console.log最后执行
第一种

async function fetchRequest(url, data = {}, method = "GET") {  
    return new Promise((resolve, reject) => {  
        uni.request({  
            url: url, // 服务器url  
            method: method, // HTTP请求方法  
            data: data, // 请求的参数  
            success: (res) => {  
                resolve(res.data); // 请求成功  
            },  
            fail: (err) => {  
                reject(err); // 请求失败  
            }  
        })  
    })  
}  

// 使用async函数调用  
async function fetchData() {  
    try {  
        // 等待fetchRequest函数的结果  
        let result = await fetchRequest('https://example.com/api/data', {  
            param: 'value'  
        }, 'GET');  
        console.log('请求结果:', result);  
        // 可以继续处理result  
    } catch (error) {  
        console.error('请求失败:', error);  
        // 错误处理  
    }  
}  

// 调用fetchData,像处理同步请求一样处理结果  

const init = async () => {  
    await fetchData();  
    await console.log("期望这里最后执行。可是每次运行结果都是,这一句先执行,怎么办?")  
}  
init()

第二种

async function fetchRequest(url, data = {}, method = "GET") {  
    return new Promise((resolve, reject) => {  
        uni.request({  
            url: url, // 服务器url  
            method: method, // HTTP请求方法  
            data: data, // 请求的参数  
            success: (res) => {  
                resolve(res.data); // 请求成功  
            },  
            fail: (err) => {  
                reject(err); // 请求失败  
            }  
        })  
    })  
}  

// 使用async函数调用  
async function fetchData(callback) {  
    try {  
        // 等待fetchRequest函数的结果  
        let result = await fetchRequest('https://example.com/api/data', {  
            param: 'value'  
        }, 'GET');  
        console.log('请求结果:', result);  
        callback(result)  
        // 可以继续处理result  
    } catch (error) {  
        console.error('请求失败:', error);  
        // 错误处理  
    }  
}  

// 调用fetchData,像处理同步请求一样处理结果  

fetchData((result) => {  
    console.log(result)  
    console.log("期望这里最后执行。可是每次运行结果都是,这一句先执行,怎么办?")  
})

要回复问题请先登录注册