今天使用uview封装的vuex写数据的时候,又卡死了一个可怜的小程序,记录一下吧,真是条条路上有大坑,一踩一个准啊!
上代码:
async matchStatus(code){
//传入一个状态码,匹配状态名,如传入10020300,返回“运输中” 。
if(code){
//从本地存储vuex_status中查询该状态码
let status = find(this.vuex_status, ['code', code]);
if(status)
return status.name
else{
//没查到则发查询请求并写入vuex
const res = await this.$u.api.getStatus(code)
if(res){
if(!this.vuex_status[code]){
try{
this.$u.vuex('vuex_status.'+code,res)
}catch(e){
console.log('vuex_status重复写相同key值,可忽略。')
//若有同时写操作会抛出错来,可不处理
}
}
return res.name
}
}
}
return ''
}
一段平平无奇的代码飘过~~
亮点来了,实现要求是将状态信息以状态码为key,状态信息为value存储在vuex_status中,这样列表展示时发一堆状态码异步查询请求,key相同就不会重复写入相同的值。
然后我将vuex_status初始化为一个空数组[ ]
一执行,小程序直接卡死。请求全pending在那儿,过不去了。
原因竟是因为:
status是个数字啊!
this.$u.vuex('vuex_status.'+code,res) 就相当于 vuex_status[1030200] = res
每回写一个序列号为上万的数组,可不得卡死。最后解决方法是将vuex_status初始化为空对象{}。
反正写到本地都是存的字符串,没差。
师父怼我:面试咋没问问你这个,意思是被我蠢到了。我是真没想到啊,还不是因为this.$u.vuex()不支持 [ ] 只能用 . (小小声狡辩)