首页 > 编程语言 >微信小程序使用Promise异步请求

微信小程序使用Promise异步请求

时间:2024-11-06 14:16:41浏览次数:5  
标签:异步 微信 list listItem2 Promise res data page

 在微信小程序中,如果你希望在一个 HTTP 请求完成后再继续执行下面的代码,可以将后续代码放入请求的回调函数中。如果不想使用嵌套的回调函数,可以考虑使用 Promise 来处理异步请求。这样可以更清晰地组织代码,还能避免“回调地狱”的问题。

这是原方法并不会在执行完http请求后再往下执行,在执行http请求的时候同时执行listItem3,导致listItem3为空。

    

    list: function (page) {
        var that = this;
        wx.showLoading({
            title: '加载中',
        })
        that.data.loading = true;
        let listItem = that.data.listItem;
        http.get('/********', { page: page }, function (res) {
            that.data.loading = false;
            wx.hideLoading()
            if (res && res.code == 1) {
                var list = res.data.list;
                if (list.length > 0) {
                    list.forEach(function (o) {
                        o.isN6 = 1
                        listItem.push(o)
                    })
                }
                that.setData({
                    listItem: listItem,
                    page: res.data.curr_page,
                    isLastPage: res.data.is_last_page,
                });
            }
        })

        let listItem2 = that.data.listItem2;

        http.get('/********', { page: page }, function (res) {

            if (res && res.code == 1) {
                var list = res.data.list;
                if (list.length > 0) {
                    list.forEach(function (o) {
                        listItem2.push(o)
                    })
                }
                that.setData({
                    listItem2: listItem2,
                    page: res.data.curr_page,
                    isLastPage2: res.data.is_last_page,
                });


            }
        })

        let listItem3 = [...that.data.listItem, ...that.data.listItem2]
        listItem3 = listItem3.sort((a, b) => new Date(a.add_time).getTime() - new Date(b.add_time).getTime())
        that.setData({ listItems: listItem3 })

    },

将 HTTP 请求封装成 Promise,使得可以使用 .then() 和 .catch() 来处理结果和错误,使用 Promise.all 来并行处理多个请求,确保两个请求都完成后再执行后续逻辑。

list: function (page) {
        var that = this;
        wx.showLoading({
            title: '加载中',
        });

        that.data.loading = true;

        // 定义返回 Promise 的函数  
        const getListN6Notify = (page) => {
            return new Promise((resolve, reject) => {
                http.get('/*********', { page: page }, function (res) {
                    that.data.loading = false;
                    wx.hideLoading();
                    if (res && res.code == 1) {
                        var list = res.data.list;
                        if (list.length > 0) {
                            list.forEach(function (o) {
                                o.isN6 = 1;
                                that.data.listItem.push(o);
                            });
                        }
                        that.setData({
                            listItem: that.data.listItem,
                            page: res.data.curr_page,
                            isLastPage: res.data.is_last_page,
                        });
                        resolve();  // 请求完成,解析 Promise  
                    } else {
                        reject(new Error('请求失败'));  // 处理错误情况  
                    }
                });
            });
        };

        const getListN8Notify = (page) => {
            return new Promise((resolve, reject) => {
                http.get('/********', { page: page }, function (res) {
                    if (res && res.code == 1) {
                        var list = res.data.list;
                        if (list.length > 0) {
                            list.forEach(function (o) {
                                that.data.listItem2.push(o);
                            });
                        }
                        that.setData({
                            listItem2: that.data.listItem2,
                            page: res.data.curr_page,
                            isLastPage2: res.data.is_last_page,
                        });
                        resolve();  // 请求完成,解析 Promise  
                    } else {
                        reject(new Error('请求失败'));  // 处理错误情况  
                    }
                });
            });
        };

        // 并行执行两个请求  
        Promise.all([getListN6Notify(page), getListN8Notify(page)]).then(() => {
            // 所有请求完成后执行  
            let listItem3 = [...that.data.listItem, ...that.data.listItem2];
              
            listItem3.sort((a, b) => {
                // 解析 add_time 字符串为 Date 对象  
                const dateA = new Date(a.add_time.replace(/年|月/g, '-').replace(/日/g, ''));
                const dateB = new Date(b.add_time.replace(/年|月/g, '-').replace(/日/g, ''));
                return dateB - dateA; // 比较时间  
            });
            that.setData({ listItems: listItem3 });

        }).catch((error) => {
           
        });
    },

在 JavaScript 中,日期的比较需要将日期字符串转换为可以比较的格式。由于日期格式是 "YYYY年MM月DD日 HH:mm" 的形式,直接使用 new Date() 可能无法正确解析。为了进行正确的排序,需要将日期字符串转换为标准的日期格式。可以使用 Date.parse() 或者手动解析日期字符串。

标签:异步,微信,list,listItem2,Promise,res,data,page
From: https://blog.csdn.net/m0_64883027/article/details/143569390

相关文章

  • 这个微信自动化工具,太太太赞了!快来试一试
    你是否还在为手动添加好友、回复消息、统计数据而烦恼?今天,就让我们一起来探索这个微信自动化工具,它将彻底改变你的微信营销体验!1.批量自动添加好友,精准定位客户你是否还在为手动添加好友而烦恼?你只需将客户的号码导入系统,且提前设置好添加好友的规则,系统就会自动帮你添加好......
  • 【可白嫖源码】基于微信小程序的医院门诊管理系统 (案例分析)
    摘 要    在当今数字化时代,便捷、高效的服务体验成为民众的新期待。基于微信小程序的医院门诊管理系统应运而生,旨在为用户提供一种更为轻便、快捷的预约服务方式。通过小程序,用户可以随时随地查询医生信息、办理预约挂号,无需繁琐的线下流程,大大提升了预约服务的便捷......
  • C#异步和多线程的理解
    1.异步编程(AsynchronousProgramming)异步编程是通过非阻塞方式执行任务,通常适用于I/O密集型任务,例如文件读写、网络请求、数据库访问等。这类操作不需要占用大量CPU资源,而是等待外部资源(如网络或硬盘)响应。在C#中,异步编程使用async和await关键字来实现。异步方法会返......
  • 运营篇|如何在微信公众号的文章中插入安全知识学习小程序
    如果你是新媒体运营者,如果你也有自己的微信公众号,那么,如果你想结合微信答题小程序,来做知识竞赛活动的话,会存在这样的场景,只有关注微信公众号才能参与答题活动,或者是在微信公众号的文章中插入答题活动小程序的链接。如何在微信公众号的文章中插入答题活动小程序的链接?其实非常......
  • node基于微信小程序的养老驿站服务平台(源码+vue+uinapp+部署文档等)
    收藏关注不迷路!!......
  • CompletableFuture异步编排接口优化方案
    接口优化方案(1)程序本身,减少不必要的条件判断、循环(2)减少数据库的交互次数,以及每个sql查询的数据量(列数和行数越少越好)(3)提高sql的性能,通过建立合适的索引(4)使用java8的stream流提高集合的遍历操作的效率(5)引入缓存,从redis中加载数据的效率高于mysql(6)使用多线程异步......
  • springboot+vue体育馆预约微信小程序【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着全民健身意识的日益增强,体育馆作为重要的运动场所,其利用率逐年攀升。然而,传统的体育馆预约方式,如电话预约、现场登记等,已难以满足当前社会对高效、便捷服务的需求。尤其在高峰时段,体育馆常常出现人满为患、资源紧张的情况,给广大运......
  • 劫持微信聊天记录并分析还原 —— 解密数据库(二)
    本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以Python语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。下面我们将深入探讨这个工具的各个方面及其......
  • springboot+vue城市闪送微信小程序【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着城市化进程的加速,人们对生活便捷性的需求日益增强,特别是在快递配送领域。传统的快递服务虽然覆盖面广,但在即时配送方面往往存在响应慢、成本高的问题。近年来,以“闪送”为代表的即时配送服务迅速崛起,以其高效、灵活的特点满足了城......