小程序中遇到 data is read only 的只读问题

小程序开发中,统一添加一个接口发起的渠道标识,而对data进行处理

//app.js
App({
  globData:{
    sysInfo:{}
  },
  async onLaunch () {
    this._processAsync()
    this.globData.sysInfo=await wx.getSystemInfo()
  },
  _processAsync(){
    wx.requestAsync=function(params={}){
      const {url,method,data,header}=params
      // 统一添加一个接口发起的渠道标识
      data={
        ...data,
        // 渠道标识
        testData:'testData'
      }
      console.log(data);
      
      // 对数据筛选
      const formatData={}
      for(let pro in data){
        if(data[pro] !== undefined && data[pro] !== null){
          formatData[pro]=data[pro]
        }
      }
      return new Promise((resolve,reject)=>{
        wx.request({
          url: 'https://uinav.com/api/public/v1'+url,
          method:method||'GET',
          data:formatData,
          header,
          success:res=>{
            if(res&&+res.statusCode===200){
              if(res.data&&res.data.meta&&+res.data.meta.status === 200){
                resolve(res.data.message)    
              }else{
                reject(res)
              }
            }else{
              reject(res)
            }       
          },
          fail:err=>{
            reject(err)
          }
        })
      })
    }   
  }
})

编译后报错

Error: "data" is read-only
    at _readOnlyError (readOnlyError.js:2)
    at Object.wx.requestAsync (app.js? [sm]:14)
    at Se._callee$ (index.js? [sm]:15)
    at L (regenerator.js:1)
    at Generator._invoke (regenerator.js:1)
    at Generator.t.<computed> [as next] (regenerator.js:1)
    at asyncGeneratorStep (asyncToGenerator.js:1)
    at c (asyncToGenerator.js:1)
    at asyncToGenerator.js:1
    at new Promise (<anonymous>)

分析

注释掉app.js中的对data 数据处理这一块,编译处理,接口正常返回数据,那问题就在app.js中data这一块了,

而原封装接口调用函数中是用const 来解构接收params参数

const {url,method,data,header}=params

而后对其中的data处理

  const {url,method,data,header}=params
      // 统一添加一个接口发起的渠道标识
      data={
        ...data,
        // 渠道标识
        testData:'testData'
      }
      console.log(data);
      
      // 对数据筛选
      const formatData={}
      for(let pro in data){
        if(data[pro] !== undefined && data[pro] !== null){
          formatData[pro]=data[pro]
        }
      }

但是const 定义的是常量,无法对数据再操作。。。。。。。。

所以 替换成 let就可以了

没错,就是这么简单的一个问题,而自己也常犯这种错误。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值