我真的很困惑。我尝试了很多事情,但无法达到正确的结果。
这是场景;我有可以选择多种产品并一一删除的产品清单。我要等所有项目都可以删除,然后再给我一个计数。
async delete (ids) {
const res = await this.deleteProcess(ids);
return res;
},
deleteProcess(ids) {
let countS = 0;
Object.assign(ids).map((id) => {
axios({
method: "DELETE",
url: store.getters.getServerPath + "api/v1/product/" + id,
headers: store.getters.getConfigHeaders,
withCredentials: true
}).then(function (response) {
countS++;
}).then(() => {
console.log(countS);
return countS;
});
});
}
并像下面这样调用此函数:
deleteSelected (id) {
if (id !== undefined) {
this.selectedRows.push(id);
}
controller.delete(this.selectedRows).then(function (res) {
alert(res + " items deleted");
});
},
结果res
始终返回undefined
。但是在deleteProcess
console.log
内部显示了删除了多少个项目。
答案 0 :(得分:2)
您应该改用Promise.all
,每次响应返回时都增加countS
deleteProcess(ids) {
let countS = 0;
return Promise.all(ids.map((id) => (
axios({
method: "DELETE",
url: store.getters.getServerPath + "api/v1/product/" + id,
headers: store.getters.getConfigHeaders,
withCredentials: true
}).then(function (response) {
countS++;
})
)))
.then(() => countS);
}
但是您最好只计算length
中的ids
,而不要保留一个外部countS
变量:
.then(() => ids.length);
还请注意
Object.assign(ids)
不执行任何操作-结果表达式是原始变量===
的{{1}},所以也可以只使用原始变量。
发生问题时,您还可以考虑添加ids
:
catch
答案 1 :(得分:0)
您的deleteProcess
方法不返回任何内容,因此res
未定义。
如果您想要完全使用异步/等待模式的代码,并一一删除它们,则可以执行以下操作:
async deleteProcess(ids) {
let countSuccess = 0;
let countFailure = 0;
for (const id of ids) {
try {
await axios({
method: "DELETE",
url: store.getters.getServerPath + "api/v1/product/" + id,
headers: store.getters.getConfigHeaders,
withCredentials: true
});
countSuccess++;
} catch (error) {
countFailure++;
}
}
return countSuccess;
}