一杯茶,一包烟,一个BUG改一天

402 阅读4分钟

在REACT项目中给document.title 加名称

  • 这是一个二次开发的项目用DVA做的,我实在全局的MODELS文件夹中的 global.js

中的subscriptions 来监听全局的路由变化

 switch (pathname) {
         case '/index':
           setTimeout(() => {
             document.title = '数据采集与存储系统'
           });
           break;
}
  • 这里大家可能会有些问题,加setTimenout 干啥,我在DEBUGGER的过程中,如果不加setTimeout 的话他会 在跳转页面之前就把TITLE给改了,我所以我用到了异步,来处理这个问题,因为JS是单线程的,其实是他的 主线程是单线程的,所以先让他把路由跳转过去,在修改页面的标题,这样就可以了,这在往深一点挖就是 事件循环机制:微任务(Micro task)和宏任务(Macro task)

递归的问题

  • 在我拿到相应的参数的时候,点击按钮,发请求,去服务器请求数据,如果超过了40s,后台的的nginx配置 就会给我返回504的的状态码,我一开始还挺纳闷,他这显示个报错504xxxx,我咋拿到,在我请教我大哥之后 我发现,debugger, 过程中,原来还可以在控制台直接数据想要的参数,这太方便了,原谅我的无知 之后我就 输入 res.response ,数据就出来了,如果是504的话就循环调用从服务器拿数据,大概四五分钟左右感觉时 间有点漫长,期间还有一个问题,就是他后台返回了数据,我前台还是504,我表示一脸懵逼,后来发现我训练 出来的数据nainx504时间比给我返回数据的时间快,后来,才把时间设置成了40s,真坑,对于优化时间来说, 这是他算法的问题,运行的慢,我咋改,现在一想,我前端能做的,撑死再给它弄个动态规划,缓存中间结果, 利用空间换时间,在这个问题上,一开始我们不要想着怎么去优化什么的,第一要务还是要完成领导交给的任务, 慢慢成长呗,然后让自己变得更强,在做项目的过程中,就把代码写的完美一些!!!

状态码的问题

  • 报500不一定是后台的问题,报200也不一定是前台的问题

  • 当你报400表示懵逼的时候,可能是没商量好传递的字符格式

  • 500:可能是proxy代理不稳定,封装的FETCH或者AXIOS有问题,之前让我上传的类型是 "multipart/form-data" 死活发请求发不成功,但是人家POSTMAN测试就是200,你说气不气,不过感觉这个 上传的类型很古老了,也不知道 为啥这给我这个上传方式X-WWW-url-encoded 不香嘛,后台发现,还想得具体配置一些FORM-DATA的东西,果断放弃 后来用了dev中的request的方式解决了问题

  • 200:可能是接口路径不对

  • 我好像还遇到过前端报500,后台测试一直200.像这种问题,前端就把字段都写死像:

    xxx:111 直接传递,如果这样成功了,一般都是后台的问题了,后台发现果真是后台的问题,哈哈

toFixed:保留两位小数之后还会显示多余的数字

let val = 213.435345345;
val.toFixed(4)*100====>21343.530000000002  "错误格式"
(val*100).toFixed(4)===>“正确格式”

从这一问题中,我能想到的就是JavaScript的优先级的问题,详情请看MDN

REACT中的THIS问题

箭头函数中也没有自己的THIS和ARGUMENTS

THIS:常见的几种情况 - 1.构造函数中的THIS是当前类的一个实例
- 2.点前面是谁THIS就是谁,没有点THIS就是WINDOW - 3.严格模式下,在函数中THIS是 UNDEFINED - 4.我们可以用CALL、APPLY、BIND改变THIS的指向

JS值的传递

  • 一种是按引入值传递,一种是按值传递,在vue项目中,父组件给子组件传递一个 对象,子组件接收到,然后没有JSON.parse(JSON.stringif(obj)),解决没有实施 更新的问题

关于PROMISE的问题

  • 比如:在promise成功的回调当中,再次发异步接口,不断点击确定确定按钮,隔一会才能拿到数据 是因为不一定是按顺序执行的,因为不知道那个先执行 解决方案:直接return xxx() 这个方法出去即可,获取,用生成器函数,这再往深一点挖就是微任务和 宏任务的底层原理了,在此期间,我一开始想不出解决方案,想用localstorage解决问题,因为localS torage是同步的嘛,但是,我没有想,倒是还是那个 then 方法先执行

**moment时间问题 **

    if(moment().format() < moment('2020-10-11 18:00:00').format()){
        this.timer = setInterval(()=>{
          let now = moment()
          let end = moment('2020-10-11 18:00:00')
          console.log(now,end,end-now,999)
          let tempTime = moment.duration(end-now);
          this.countdown = `${tempTime.get('day')} d 
          ${tempTime.get('hours')} h 
          ${tempTime.get('minutes')} m
          ${tempTime.get('seconds')} s`
          if(tempTime<=0){
            clearInterval(this.timer)
            this.countdown=''
          }
        },1000)
      }