事情是这样的:原一个购物车 合并本地数据和服务器 数据方法如下 ,正常测试没有问题,当每次重新登录,会调用到这个方法,就会莫名其妙的卡主,debug 发现 a1.length =77731508 导致卡死

但是 console.log(a1) 长度是正常的。。。

  async getMergeCart(){
let a1 = await this.getLocalCart();//本地数据
let a2 = await this.getServeCart();//服务器数据
let arr=a1;//先赋值给arr a1 console.log('debug',a1);
console.log('debug',a2);
if(a1.length === 0){
return a2;//如果本地没数据 返回服务器数据。。。。
} for(let i=0;i<a1.length;i++){
for(let j=0;j<a2.length;j++){
if(a1[i].id!=a2[j].id){
arr.push(a2[j]);
}
} }
return arr;
}

=======================================问题解决=================================================

原因在于  arr.push(a2[j]);

当前arr 是 a1 的浅拷贝 就是a1的引用 ,arr修改 对应a1也会修改

循环如果出现 有id不相同情况 会导致 a1.length 增长导致 无限循环-

上面写法就是错误的。。。。脑子抽了

正确写法:

  async getMergeCart(){
//合并数据应当以本地数据为主!
const a1 = await this.getLocalCart();
const a2 = await this.getServeCart();
//长度先确定好..因为.length 是变长?
let len_a1 = a1.length; if(a1.length === 0){
return a2;//如果本地没数据 返回服务器数据。。。。
}
//必须使用len ---该bug当服务器数据和本地数据相同时不会触发,所以有隐蔽性。。。
for(let i=0; i<len_a1; i++){
for(let j=0;j<a2.length;j++){
if(a1[i].id==a2[j].id){
a1.splice(i,1);//移除对应key
i--;//当前key 被移除 需要对应key前移一位
len_a1--;//当前key 被移除 需要长度减一位
break;
}
}
}
for(let i=0;i<a2.length;i++){
a1.push(a2[i]);
}
return a1;
}

小程序制作中 一个奇怪的bug的更多相关文章

  1. 小程序布局中class='container'的bug

    display:flex失效,并增加其他额外属性,暂时记录,还未查询是何原因导致,更改calss则无此问题.

  2. 微信小程序开发中的二三事之网易云信IMSDK DEMO

    本文由作者邹永胜授权网易云社区发布. 简介 为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程.用产品的话说就是: 云信 IM 小程序 SDK 的能力 ...

  3. 微信小程序尝鲜一个月现状分析

    概述 曾记得在微信小程序还没有上线的时候,大家都是翘首以待.希望在张小龙,在企鹅的带领下,走出差别于原生开发的还有一条移动开发的道路,我也是一直关注着.知道1月9号,微信小程序最终对外开放了,作为第一 ...

  4. 总结微信小程序开发中遇到的坑

    总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...

  5. 微信小程序开发教程 #043 - 在小程序开发中使用 npm

    本文介绍了如何在微信小程序开发中使用 npm 中包的功能,大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频版更新. 微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发 ...

  6. 全栈开发工程师微信小程序-上(中)

    全栈开发工程师微信小程序-上(中) width: 750rpx; 750rpx代表与屏幕等宽,rpx的缩写responsive pixel,这个单位是可以根据屏幕大小进行自适应调整的像素单位. 小程序 ...

  7. 解决微信小程序开发中wxss中不能用本地图片

    微信小程序开发中wxss中不能用本地图片,我们可以用将我们的图片传到服务器上,然后直接引用在线地址.但是当我们没有服务器时,我们可以用"图床",这个具体可以百度.这里我们用第二种方 ...

  8. 微信小程序开发过程中tabbar页面显示的相关问题及解决办法!

    在微信小程序的开发过程中如果有使用过tabbar的同学,我相信一定会遇到一些困扰.为什么有些时候代码中明明已经在app.json里面增加了tabbar,可以页面中就是不显示呢?可不可以有些页面显示ta ...

  9. 小程序开发过程中常见问题[微信小程序、支付宝小程序]

    目录 一.样式中如何使用background-image呢? 二.使用自适应单位rpx类似于rem,布局尽量使用flex布局 三.万能的{{双大括号,用于在模版中输出变量 四.你想要的基础组件和API ...

随机推荐

  1. 1104 文法产生这段C程序的推导过程

  2. jdbc 6.0

    1.获取数据库自动生成的键值 package com.rong.jielong; import java.sql.Connection; import java.sql.DriverManager; ...

  3. 在Eclipse中开发WEB项目

    本文的演示是从本地文件创建dynamic web project,从svn检出的同时创建dynamic web project于此类似.我们推荐使用解压版的tomcat6.x版本,来作为服务器.可以到 ...

  4. PC和FPGA间的串口通信实现

    应用笔记 V1.0 2015/03/26 PC和FPGA间的串口通信实现   概述   本文将介绍PC和FPGA间的串口通信实现的基本思路和Verilog代码,对于通信而言,收发双方都要有相应的控制. ...

  5. jquery 集合注意点

  6. Using the command line to manage files on HDFS--转载

    原文地址:http://zh.hortonworks.com/hadoop-tutorial/using-commandline-manage-files-hdfs/ In this tutorial ...

  7. BZOJ 1066:[SCOI2007]蜥蜴(最大流)

    蜥蜴Description在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到 ...

  8. Appium与Robotium区别

    Appium是基于UIAutomator框架实现的.Appium测试进程与目标应用进程是分开的,所以Appium不能直接访问目标应用的各种element属性进行copy&paste,而只能模拟 ...

  9. Count the string HDU - 3336

    题意: 求一个字符串的每个前缀在这个字符串中出现次数的加和 解析: 默默的骂一句...傻xkmp..博主心里气愤... 拓展kmp就好多了... 因为拓展kmp每匹配一次   就相当于这些前缀出现了一 ...

  10. Python敏感地址扫描和爬取工具

    0×01 说明: 为了方便信息安全测评工作,及时收集敏感地址(初衷是爬取api地址),所以写了这么个小工具.两个简单的功能(目录扫描和url地址爬取). 0×02 使用参数: python spide ...