微信小程序中的异步操作,在回调函数中进行push之后,结果顺序混乱问题

解决微信小程序购物车列表数据乱序问题,通过调整后端PHP批量数据处理方式,确保前端展示顺序一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在小程序里面, 自己写了一个函数 ,要求是将后台获取来的数据一个个存起来, 然后按顺序在购物车列表中显示出来。

我使用的push对数据进行叠加存起来。但是实际使用的时候发现,数据push进去并无顺序可言,这是怎么回事?

在这里插入图片描述

如上图,其中res.data中的数据顺序是正确的,那么我按照下标去访问的话,出来的结果也是对应顺序的。然后使用了push之后,显示的结果为如下,刷新会出现不同的排序结果:

在这里插入图片描述在这里插入图片描述

push不是就是按照推入的顺序一个个存进去的吗,所以这个问题是???

之后查了一下发现问题出在微信小程序的异步处理上。当for循环中,进行三次request请求时,三次请求完成之后,得到的数据一起执行 seccess回调,将数据push进入我们需要的数组中并最终返回。

那么如何解决这个问题呢。咨询了一下大哥,给了建议,一个是装一个 bluebird 包,然后用 bluebird 的 promisify 方法去封装 wx.request,然后就可以用 promise 方法去用了。说实话, 我的代码水平一般,不是很懂这个解决方法改怎么去搞。所以大哥给了更简单的建议,修改api中的代码。
在这里插入图片描述
之前的php中的代码如上,最早先是只传入一个数据,得到一本书的信息后,转为json传回。那么现在比较简单的解决办法就是,把传入数据改为多个数据传入,在php中获取到的数据一起打包再传回前端。修改之后代码如下:

public function getInformation(Request $request){
      $res=[];
      if($request->isGet()){
          $isUser=$request->get('isUser');
          if(!$isUser){
              $bookid = request()->get("bookid"); 		$booklist = explode(",",$bookid); 		for($i = 0;$i<count($booklist);$i++) 		{
   			$temp= Book::where("bookid","eq",$booklist[$i])->select();
   			if($temp){
  				$res[$i]= $temp[0]; 			} 		}
             
          } else {
              $openid=request()->get("openid");
              $res= User::where("openid","eq",$openid)->select();
          }
      }
      return json($res);    }

那么相应的我们再把前端代码进行一定的修改,把传回的数据拿过来用就OK了。这样就保证了每次数据的顺序都是一样的,不会发生混乱的问题啦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值