我在项目中,抽取了一个 request 工具类,然后将所有的请求都放在 dataUtil 中。如下
/**
* 网络请求工具类
*/
// 请求根路径
const baseUrl = "http://192.168.2.252:8090/";
/**
* 发送网络请求
* 外部暴露
*
* @param {*} url
* @param {*} data
* @param {*} method
*/
function request(url, data = {}, method = "GET") {
return new Promise((resolve, reject) => {
_request(url, data, method, resolve, reject)
})
}
/**
* 发送网络请求
* 内部实现
*
* @param {*} url
* @param {*} data
* @param {*} method
* @param {*} resolve
* @param {*} reject
*/
function _request(url, data = {}, method = "GET", resolve, reject) {
// 弹窗提示用户
wx.showLoading({
title: '加载中',
})
// 发起网络请求
wx.request({
url: baseUrl + url,
data: data,
method: method,
header: {
"Content-Type": "application/x-www-form-urlencoded",
"port": "miniprogram"
},
success: (res) => {
wx.hideLoading()
if (res.data.code == 200) { // 请求成功
resolve(res.data);
} else { // 请求失败
wx.showToast({
title: '服务器出小差啦~',
icon: 'error'
})
reject()
}
},
fail: (err) => {
console.log(err)
wx.hideLoading()
wx.showToast({
title: '网络错误',
icon: 'error'
})
reject();
}
});
}
module.exports = {
request
}
/**
* 数据层
* 所有的数据都来自于本文件
*/
const networkUtil = require("requestUtil")
/**
* 根据 userId 获取用户数据
* @param {*} userId
*/
async function getUserDataFromUserId(userId) {
let url = "user/userDataFromUserId";
let data = {
"userId": userId
};
let method = "POST";
let res = await networkUtil.request(url, data, method);
console.log("res:", res);
console.log("返回数据");
return res;
}
module.exports = {
getUserDataFromUserId
}
但是,在页面中获取数据时,如下
let user = dataUtil.getUserDataFromUserId("xxx");
console.log("获得数据");
console.log("user:", user)
获得的还是 promise 对象,就是说,在 getUserDataFromUserId 方法中,还没有将 promise 对象转化,就已经返回了
求教,应该怎么做
async + await,只是一个方便阅读的写法而已
只可以让async + await内部的代码,变成同步执行,
在async + await外部看来,你dataUtil.getUserDataFromUserId其实还是一个异步方法
返回的是一个promise