async init(state, arg) { let result = await systemConfigApi.getListByGroup(arg.group); if (1 === result.code) { state[arg.key] = getBusinessTypeList(result.data); console.log(result); } }vue 在mutations 函数中调用一个使用axios请并且带有参数的get方法,后端有响应数据且成功,而且在控制台newwork中响应也有数据返回,但是在代码中断点显示数据只有code码200成功,list数组为空,并且使用console.log打印数据也是空,但是该函数在其他地方调用数据可以打印出来
时间: 2024-03-01 12:53:30 浏览: 110
从你提供的代码中看来,可能是由于异步请求的问题导致的。你可以尝试在mutations中使用async/await来等待axios的请求完成。
以下是一个参考代码:
```javascript
async init(state, arg) {
try {
const response = await systemConfigApi.getListByGroup(arg.group);
if (1 === response.code) {
state[arg.key] = getBusinessTypeList(response.data);
console.log(response);
}
} catch (error) {
console.error(error);
}
}
```
在以上代码中,我们使用了async/await来等待axios的请求完成,并且使用try/catch来处理可能的错误。请注意,我们使用了axios的get方法,并且将查询参数放在了URL中传递。
如果你的问题还没有解决,请提供更多的代码和错误信息,以便更好的帮助你。
相关问题
async init(state, arg) { try { let response = await systemConfigApi.getListByGroup(arg.group); if (1 === response.code) { state[arg.key] = getBusinessTypeList(response.data); console.log(response); } } catch (error) { console.error(error); }},使用了axios和await,在newWork中响应有数据,但是这里打印出来数据为空
根据你提供的代码片段,我看不出问题所在。但是,我可以给你一些可能导致问题的原因和排查方法:
1. `systemConfigApi.getListByGroup` 返回的数据是否为空?
可以在控制台打印出 `response` 看一下,确保 `response.data` 不为空。
2. `getBusinessTypeList` 函数是否正确?
可以在控制台打印出 `state[arg.key]` 看一下,确保该函数返回的数据格式正确。
3. 确保 `arg.group` 和 `arg.key` 参数的值是正确的。
可以在函数调用前打印出这两个参数,确保值正确。
4. 确保在调用 `init` 函数时,传入了正确的 `state` 和 `arg` 参数。
可以使用 `console.log` 打印出这两个参数,确保值正确。
希望这些提示可以帮助你找到问题所在。
优化这段代码:import { reactive, toRaw } from 'vue' // 分页钩子函数 interface Options { page?: number size?: number fetchFun: (_arg: any) => Promise<any> params?: Record<any, any> firstLoading?: boolean } export function usePaging(options: Options) { const { page = 1, size = 15, fetchFun, params = {}, firstLoading = false } = options // 记录分页初始参数 const paramsInit: Record<any, any> = Object.assign({}, toRaw(params)) // 分页数据 const pager = reactive({ page, size, loading: firstLoading, count: 0, lists: [] as any[], extend: {} as Record<string, any> }) // 请求分页接口 const getLists = () => { pager.loading = true return fetchFun({ page_no: pager.page, page_size: pager.size, ...params }) .then((res: any) => { pager.count = res?.count pager.lists = res?.lists pager.extend = res?.extend return Promise.resolve(res) }) .catch((err: any) => { return Promise.reject(err) }) .finally(() => { pager.loading = false }) } // 重置为第一页 const resetPage = () => { pager.page = 1 getLists() } // 重置参数 const resetParams = () => { Object.keys(paramsInit).forEach((item) => { params[item] = paramsInit[item] }) getLists() } return { pager, getLists, resetParams, resetPage } }
以下为优化后的代码:
import { reactive, toRaw } from 'vue'
interface Options {
page?: number
size?: number
fetchFun: (_arg: any) => Promise<any>
params?: Record<any, any>
firstLoading?: boolean
}
export function usePaging(options: Options) {
const { page = 1, size = 15, fetchFun, params = {}, firstLoading = false } = options
const paramsInit: Record<any, any> = toRaw(params)
const pager = reactive({
page,
size,
loading: firstLoading,
count: 0,
lists: [] as any[],
extend: {} as Record<string, any>
})
const getLists = async () => {
pager.loading = true
try {
const res = await fetchFun({
page_no: pager.page,
page_size: pager.size,
...params
})
pager.count = res?.count
pager.lists = res?.lists
pager.extend = res?.extend
return Promise.resolve(res)
} catch (err) {
return Promise.reject(err)
} finally {
pager.loading = false
}
}
const resetPage = () => {
pager.page = 1
getLists()
}
const resetParams = () => {
Object.assign(params, paramsInit)
getLists()
}
return {
pager,
getLists,
resetParams,
resetPage
}
}
优化的部分包括:
1. 使用 async/await 替代 Promise.then() 语法,使代码更加简洁易读,同时也更具可读性。
2. 重置参数部分使用 Object.assign() 替代 Object.keys(paramsInit).forEach() 语法,可以更简洁地实现参数重置操作。
阅读全文