目的:根據查到的子分類,將其父分類也查出來,放入其中。javascript
使用方法:將子分類中的父分類字段去重後放入par_arr,而後遍歷par_arr去取父分類,再將結果插入子分類的集合中。前端
問題:console.log(res);的結果中包含了父分類,但組件未從新渲染。java
未解決以前的代碼:api
services / filter.js數組
import request from '../utils/request'; function getOne(id){ return request('/api/categories/'+id); };
export function fetch(){ bardata = request('/api/categories').then(res=>{ //將父分類去重,放入par_arr var par_obj={}; var par_arr=[]; res.data.map(d=>{ let _par=d.parent; if(!par_obj[_par] && _par!=0){ par_obj[_par]=1; par_arr.push(d.parent); } }); //根據par_arr獲取父分類數據 Promise.all(par_arr.map(id=>getOne(id))).then(res1=>{ res1.map(item=>{ res.data.push(item.data); }) }); console.log(res); return res; }) return bardata; }
解決方法是:不要返回res變量,直接返回Promise.all(),便可在執行完以後再返回。fetch
我以前都陷入在 如何使res變量更新的死衚衕裏了。blog
解決後的代碼:ip
import request from '../utils/request'; function getOne(id){ return request('/api/categories/'+id); }; export function fetch({id}){ if(id === 0){ return request('/api/categories').then(res=>{ //去重獲得父分類數組 var par_obj={}; var par_arr=[]; res.data.map(d=>{ let _par=d.parent; if(!par_obj[_par] && _par!=0){ par_obj[_par]=1; par_arr.push(d.parent); } }); //根據父分類數組去取父分類數據,加入子分類中 return Promise.all(par_arr.map(id=>getOne(id))).then(res1=>{ var res1Data_arr=[]; res1.map(item=>{ res1Data_arr.push(item.data); }); res.data = res.data.concat(res1Data_arr); return res; }); }) }else{ return getOne(id);
} };
ps:歡迎訪問個人小站:模板世界,獲取更多有用的前端資源。資源