我想给重复调用的接口写个公共方法,咱就是说不用下次又复制粘贴有点屎山代码的赶脚,明明只是换个参数
util/index.js中具体写的公共方法内容如下
function search_read(model,domain){
let koko = [];
let params = {
"id": 997380524,
"jsonrpc": "2.0",
"method": "call",
"params": {
"model": model,
"domain": domain,
"context": {"lang": "zh_CN","tz": "Asia/Shanghai"},
}
}
axios.post('/api/web/dataset/search_read',params).then((res)=>{
koko = res.data.result.records;
console.log("koko",res.data.result.records);
})
return koko
}
写得规规矩矩对吧,咱也不知道为啥,打印的数据就是 [ ]
后来一直找原因,直到看到一篇博客才知道原来问题在axios这儿
我上面写得方法,axios是异步操作,也就是说会同时进行,等不到数据返回就赋值了
解决方法就是:async + await async声明方法为异步方法,await等待异步操作执行完
async function search_read(model,domain){
let koko = [];
let params = {
"id": 997380524,
"jsonrpc": "2.0",
"method": "call",
"params": {
"model": model,
"domain": domain,
"context": {"lang": "zh_CN","tz": "Asia/Shanghai"},
}
}
await axios.post('/api/web/dataset/search_read',params).then((res)=>{
koko = res.data.result.records;
})
return koko
}
方法的调用那里,也要注意,异步方法返回值为peomise<>,接收时需要.then(res=>{})
this.$util.search_read("yd_stock_out_in.picking_mrp_out_line",[["default_code", "ilike", '2D.02.02.03-01']]).then(res=>{
this.orderInfo = res;
})
完美,感谢老哥的分享帮我解决问题原文