将网络请求抽离成单独js

 pageLifetimes: {
            show() {
          
                this.getGoodsList(true);
                
            },
        },  
-----------------------------------------------------------

  // 分页查询商品列表
             getGoodsList(isInit = false) {
                let { params, goodsList } = this.data;
                if (isInit) {
                    params.pageNo = 1;
                }
                this.setData({
                    loading: true,
                });
                let apiName = params.keywords ? "esSearchGoodsPage" : "pageGoodByExample";
                console.log('apiName',apiName)
                bccGoodsService[apiName](params)
                    .then(({ result }) => {
                        let { list } = result;
                        list = list.map((item) => {
                            return {
                                values: this.handleDataFormat(item),
                                ...item,
                            };
                        });
                        const oldList = isInit ? [] : goodsList;
                        this.setData({
                            goodsList: [...oldList, ...list],
                           
                        });
                        console.log("3:组件加载数据,",this.data.goodsList)
                    })
                    .finally(() => {
                        this.setData({
                            loading: false,
                        });
                    });
            },

上面是一个分页查询商品的请求,并把数据放到了goodsList中,配合前端展示,实现了页面一加载就调用该方法,并且显示到页面上。

 可以看到请求数据就是第一页,显示10个,我们将会看到10条数据过来

 

 

import { ApiService } from "../index";
import { product } from "../config";
class BccGoodsService extends ApiService {
    // 首页
    pageGoodByExample(params) {
        return this.$postJson("pageGoodByExample", params);
    }
    // 搜索
    esSearchGoodsPage(params) {
        return this.$postJson("esSearchGoodsPage", params);
    }
    // 详情
    findGoodsDTOById(params) {
        return this.$get("findGoodsDTOById", params);
    }
    // 更新
    updateGoodsDTO(params) {
        return this.$postJson("updateGoodsDTO", params);
    }
    // 手动上架
    insertGoodsDTO(params) {
        return this.$postJson("insertGoodsDTO", params);
    }
    // 添加商品
    syncGoodsDTOWsxcWatchHead(params) {
        return this.$postJson("syncGoodsDTOWsxcWatchHead", params);
    }
    // 计算总成本
    getBccGoodsPriceTotal(params) {
        return this.$postJson("getBccGoodsPriceTotal", params);
    }
}
export default new BccGoodsService(product, "bccGoods");

---------------------------
../config   config.js
export const product = "product-web";

import { merge, paramsFilter } from "../utils/helper";
import Toast from "../utils/toast.js";
import session from "../utils/session.js";
import { SERVER_BASE_URL } from "../config/index.js";

const DEFAULT_OPTIONS = {
    header: {
        "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
        Accept: "application/json",
    },
    // 默认会在接口出错时弹出Toast,如果有特定请求不需要展示Toast,可以在options中传入toastError: false
    toastError: true,
};

const authCodeMessage = {
    4001: "Token为空,请重新登录",
    4002: "Token无效,请重新登录",
    1415: "登录过期,请重新登录",
};

const codeMessage = {
    500: "服务器发生错误,请检查服务器。",
    502: "网关错误。",
    503: "服务不可用,服务器暂时过载或维护。",
    504: "网关超时。",
    ...authCodeMessage,
};

function showErrorMsgByResponse(data) {
    Toast.simple(codeMessage[data.code] || data.message);
}

let isTokenRefreshing = false;

let queue = [];

function refreshToken() {
    const accessInfo = session.get("accessInfo");
    const { refresh_token } = accessInfo;
    return request("/auth-web/auth/refreshToken", { refreshToken: refresh_token }, { method: "POST" })
        .then((res) => {
            // 更新认证信息
            const accessInfo = res.result;
            session.setSync("accessInfo", accessInfo);
            return accessInfo;
        })
        .then((accessInfo) => {
            // 执行队列中的请求
            queue.forEach((cb) => {
                cb(accessInfo);
            });
        })
        .finally(() => {
            isTokenRefreshing = false;
            // 清空队列
            queue = [];
        });
}

function request(url, data, options = {}) {
    return new Promise((resolve, reject) => {
        const mergedOptions = merge(DEFAULT_OPTIONS, options);
        const accessInfo = session.get("accessInfo");
        if (accessInfo) {
            const { token_type, access_token } = accessInfo;
            // 添加headers
            mergedOptions.header.Authorization = `${token_type} ${access_token}`;
        }
        const handledParams = paramsFilter(data, options.method === "GET");
        // eslint-disable-next-line no-console
        console.log(`${options.method}接口:${SERVER_BASE_URL + url}, 参数:${JSON.stringify(handledParams)}`);
        wx.request({
            url: SERVER_BASE_URL + url,
            data: handledParams,
            timeout: 30000,
            ...mergedOptions,
            success: function (res) {
                if (res.data.success) {
                    resolve(res.data);
                } else {
                    console.error(res);
                    // inner code handler
                    switch (res.data.code) {
                        // 需要重新登录
                        case 4001:
                        case 4002:
                        case 1415:
                            showErrorMsgByResponse(res.data);
                            wx.redirectTo({
                                url: "/pages/login/index",
                            });
                            reject(res);
                            break;
                        case 4003:
                            // 刷新token
                            if (!isTokenRefreshing) {
                                isTokenRefreshing = true;
                                refreshToken().then(() => {
                                    // 再次请求
                                    resolve(request(url, data, options));
                                });
                            } else {
                                const trigger = function () {
                                    resolve(request(url, data, options));
                                };
                                queue.push(trigger);
                            }
                            break;
                        default:
                            if (mergedOptions.toastError) {
                                showErrorMsgByResponse(res.data);
                            }
                            reject(res);
                            break;
                    }
                }
            },
            fail: function (res) {
                Toast.simple("服务异常");
                console.error(res);
                reject(res);
            },
        });
    });
}

export class ApiService {
    constructor(context, feature) {
        this.context = context; // 上下文
        this.feature = feature; // 特性
    }

    // get请求
    $get(action, data, options = {}) {
        return request(`/${this.context}/${this.feature}/${action}`, data, { ...options, method: "GET" });
    }

    // delete请求
    $del(action, data, options = {}) {
        return request(`/${this.context}/${this.feature}/${action}`, data, { ...options, method: "DELETE" });
    }

    // post请求
    $post(action, data, options = {}) {
        return request(`/${this.context}/${this.feature}/${action}`, data, { ...options, method: "POST" });
    }

    // post application/json请求
    $postJson(action, data, options = {}) {
        const defaultOptionsForPostJson = {
            header: {
                "Content-Type": "application/json",
            },
        };
        return request(`/${this.context}/${this.feature}/${action}`, data, { ...defaultOptionsForPostJson, ...options, method: "POST" });
    }

    // put请求
    $put(action, data, options = {}) {
        return request(`/${this.context}/${this.feature}/${action}`, data, { ...options, method: "PUT" });
    }

    // put application/json请求
    $putJson(action, data, options = {}) {
        const defaultOptionsForPostJson = {
            header: {
                "Content-Type": "application/json",
            },
        };
        return request(`/${this.context}/${this.feature}/${action}`, data, { ...defaultOptionsForPostJson, ...options, method: "PUT" });
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值