收藏
回答

请教 Promise 相关问题?

我在项目中,抽取了一个 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 对象转化,就已经返回了

求教,应该怎么做



回答关注问题邀请回答
收藏

1 个回答

  • 浪花骑士
    浪花骑士
    2022-08-19

    async + await,只是一个方便阅读的写法而已

    只可以让async + await内部的代码,变成同步执行,

    在async + await外部看来,你dataUtil.getUserDataFromUserId其实还是一个异步方法

    返回的是一个promise

    2022-08-19
    有用
    回复 1
    • 马力
      马力
      2022-08-19
      感谢,刚才查了些promise的资料,已经理解啦。我这个思路路子好像走歪了
      2022-08-19
      回复
登录 后发表内容