export function fetchDataCft(query_dict) { return new Promise((resolve, reject) => { queryCft(query_dict).then(response => { const data = response.data const total_count = response['total_count'] // console.log(data) resolve(data, total_count) }).catch(error => { reject(error) }) }) } 如何获取fetchDataCft返回的data和total_count 并使用箭头函数进行处理
时间: 2024-01-21 17:05:00 浏览: 54
可以使用 `then()` 方法来获取 `fetchDataCft()` 方法返回的 `Promise` 对象中 resolve 的结果,如下所示:
```javascript
fetchDataCft(this.query_dict)
.then((data, total_count) => {
// 在这里可以处理获取到的data和total_count
console.log(data, total_count);
})
.catch(error => {
console.log(error);
});
```
需要注意的是,`then()` 方法中的参数是 resolve 函数返回的结果,因此要根据 `fetchDataCft()` 方法中 resolve 函数的定义来决定参数的个数。在这个例子中,resolve 函数返回了两个结果,分别为 `data` 和 `total_count`,因此需要在 `then()` 方法中指定两个参数来接收这两个结果。
相关问题
export function fetchDataCft(query_dict) { return new Promise((resolve, reject) => { queryCft(query_dict).then(response => { const data = response.data const total_count = response['total_count'] // console.log(total_count) resolve(data, total_count) }).catch(error => { reject(error) }) }) } getData() { if (Object.keys(this.query_dict_mark).length === 0) { // 初始化query_dict中problem_id__in的值 this.$delete(this.query_dict, 'problem_id__in') fetchDataCft(this.query_dict).then( (data, total_count) => { this.data_list = data; this.total_count1 = total_count; }, ) } else { fetchDataMark(this.query_dict_mark).then(data => { this.problem_id_list = data.map(item => item.problem_id) this.$set(this.query_dict, 'problem_id__in', this.problem_id_list) // this.query_dict['problem_id__in'] = this.problem_id_list fetchDataCft(this.query_dict).then((data, total_count) => { this.data_list = data; this.total_count1 = total_count; }) }) } // 获取当前用户的收藏列表(problem_id_favorite) fetchDataMark({'favorite': this.current_user_name}).then(data => { this.problem_id_favorite = data.map(item => item.problem_id) }) }, total_count1的值不是预期的,请帮忙优化代码
在 `fetchDataCft` 函数中, `resolve` 方法只接受一个参数,所以需要将 `data` 和 `total_count` 封装为一个对象传递。修改后的 `fetchDataCft` 函数如下:
```
export function fetchDataCft(query_dict) {
return new Promise((resolve, reject) => {
queryCft(query_dict)
.then(response => {
const data = response.data;
const total_count = response['total_count'];
resolve({ data, total_count });
})
.catch(error => {
reject(error);
});
});
}
```
在 `getData` 函数中,当 `Object.keys(this.query_dict_mark).length === 0` 时,会调用 `fetchDataCft` 函数,但是这个函数返回的是一个 Promise,需要使用 `then` 方法来处理异步操作。修改后的代码如下:
```
getData() {
if (Object.keys(this.query_dict_mark).length === 0) {
// 初始化query_dict中problem_id__in的值
this.$delete(this.query_dict, 'problem_id__in');
fetchDataCft(this.query_dict)
.then(({ data, total_count }) => {
this.data_list = data;
this.total_count1 = total_count;
})
.catch(error => {
console.error(error);
});
} else {
fetchDataMark(this.query_dict_mark)
.then(data => {
this.problem_id_list = data.map(item => item.problem_id);
this.$set(this.query_dict, 'problem_id__in', this.problem_id_list);
// this.query_dict['problem_id__in'] = this.problem_id_list
fetchDataCft(this.query_dict)
.then(({ data, total_count }) => {
this.data_list = data;
this.total_count1 = total_count;
})
.catch(error => {
console.error(error);
});
})
.catch(error => {
console.error(error);
});
}
// 获取当前用户的收藏列表(problem_id_favorite)
fetchDataMark({ favorite: this.current_user_name })
.then(data => {
this.problem_id_favorite = data.map(item => item.problem_id);
})
.catch(error => {
console.error(error);
});
},
```
这样,无论是在 `fetchDataCft` 函数中还是在 `getData` 函数中,都能够正确地处理异步操作,避免出现不符合预期的结果。
function install() { Vue.use(DataDict, { metas: { '*': { labelField: 'dictLabel', valueField: 'dictValue', request(dictMeta) { const storeDict = searchDictByKey(store.getters.dict, dictMeta.type) if (storeDict) { return new Promise(resolve => { resolve(storeDict) }) } else { return new Promise((resolve, reject) => { getDicts(dictMeta.type).then(res => { store.dispatch('dict/setDict', { key: dictMeta.type, value: res.data }) resolve(res.data) }).catch(error => { reject(error) }) }) } }, }, }, }) }
这是一个 Vue 插件的安装方法,其中使用了一个名为 DataDict 的插件,并且传入了一个配置对象。该配置对象包含一个名为 metas 的字段,其值为一个对象,该对象中又包含一个名为 '*' 的字段,表示所有类型的数据字典都使用同样的配置。该配置中定义了数据字典的 labelField 和 valueField 字段,分别表示显示的标签和对应的值。另外还定义了一个 request 函数,用于获取数据字典的值,如果该字典已经在 Vuex 中存在,则从 Vuex 中获取,否则使用 getDicts 函数从后端获取,并将获取到的数据保存到 Vuex 中。
阅读全文