小程序开发中,统一添加一个接口发起的渠道标识,而对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就可以了
没错,就是这么简单的一个问题,而自己也常犯这种错误。。。。。