【发布时间】:2019-08-29 21:54:08
【问题描述】:
我有一个 Vuex 操作,其中我需要遍历对象列表,让服务通过 Axios 将它们发送到 REST 端点,然后返回 data 和 response。我需要以这样的方式进行操作,以便获得成功 POST 的计数,以便显示消息。我遇到的问题是使用 async/await 和 for...of 循环。
这是我目前所拥有的:
async bulkSave({
dispatch,
getters,
}, item) {
let saveCount = 0;
// eslint-disable-next-line no-restricted-syntax
for (const user of item.users) {
const resp = await tenantUserService.save({
user,
tenantCode: item.tenantCode,
skipUserCheck: true,
});
const { status, data } = resp;
if (resp.status === 201) {
saveCount += 1;
dispatch('setSaveResponse', { status, data });
}
}
dispatch('alertMessage/setApiResponse', {
resp,
component: getters.getComponent,
}, { root: true });
return resp;
},
这是我正在使用的现有功能,一次保存一条记录:
async save({ dispatch, getters }, { service, item }) {
const resp = await service.save(item);
const { status, data } = resp;
dispatch('setSaveResponse', { status, data });
dispatch('alertMessage/setApiResponse', {
resp,
component: getters.getComponent,
}, { root: true });
return resp;
},
将此作为save 服务被调用:
static async save(item) {
const { user, tenantCode, skipUserCheck } = item;
return await super.perform(axios.post(ServiceUrlProvider.gmiUrl().concat('/tenant/').concat(tenantCode).concat('/person'), user));
}
我最初尝试使用.forEach(),但由于async/await 在forEach() 中不起作用,我开始尝试... ofbased on answers like [this one][1]. However, esLint is telling me I can't haveawaitinside a loop, and when I run this, my call totenantUserService.save()just returns_resp `:
我缺少什么来完成这项工作,以便我可以 1) 保存项目并 2) 获得正确的响应,以便我可以增加 saveCount 并继续?
【问题讨论】:
-
在
bulkSave中,您将resp作为for 循环内的常量...那么您在声明的循环之外返回的resp在哪里? -
另外,就像这里的一个观点......你最终的
save服务真的不需要异步/等待,因为你return是唯一的awaited值......话虽如此,super.perform会返回一个 Promise 吗?
标签: javascript asynchronous vuejs2 async-await vuex