我有一个使用 axios 的函数,我根据为特定用户返回的 id 数量删除多条记录。
async function DeleteAllRecords (emailAddress) {
try {
var accessToken = await setup.getAccessToken(emailAddress);
var userId = await user.getUserId(emailAddress);
var recordIds = await getAllRecordID(emailAddress);
console.log(`Deleting all records for `+emailAddress+``);
for (const rId of recordIds) {
const response = await axios.delete(`${process.env.API_URL}/`+userId+`/records/`+recordIds+``, {'headers': {Authorization: 'Bearer '+accessToken+''}});
}
return response;
}
catch(e) {
console.error(``+emailAddress+` produced the Record Delete Error = ` + e);
}
}
这不起作用,我不确定为什么。我想查看每个 axios.delete 调用的响应,但我不确定如何获得它。目前其返回的响应未定义。
最佳答案
为什么你的代码不起作用:
-
const response
在循环作用域内声明,并且不能在该闭包之外访问。 - 即使它是在循环之前定义的(使用
let const
)并在循环内部分配,您仍然只能返回最后一个响应。
您可以将每个响应推送到一个数组 ( responses
),并返回该数组:
async function DeleteAllRecords (emailAddress) {
try {
var accessToken = await setup.getAccessToken(emailAddress);
var userId = await user.getUserId(emailAddress);
var recordIds = await getAllRecordID(emailAddress);
console.log(`Deleting all records for `+emailAddress+``);
const responses = [];
for (const rId of recordIds) {
const response = await axios.delete(`${process.env.API_URL}/`+userId+`/records/`+recordIds+``, {'headers': {Authorization: 'Bearer '+accessToken+''}});
responses.push(response);
}
return responses;
}
catch(e) {
console.error(``+emailAddress+` produced the Record Delete Error = ` + e);
}
}
但是,在这种情况下,多个并行请求会更好,因为您实际上不需要一一删除。我会使用 Array.map()
迭代 recordIds
数组,并为每个数组返回一个 promise ,然后使用 Promise.all()
等待所有响应,它也会返回一组响应:
async function DeleteAllRecords (emailAddress) {
try {
var accessToken = await setup.getAccessToken(emailAddress);
var userId = await user.getUserId(emailAddress);
var recordIds = await getAllRecordID(emailAddress);
console.log(`Deleting all records for `+emailAddress+``);
return Promise.all(recordIds.map(rId => axios.delete(`${process.env.API_URL}/`+userId+`/records/`+recordIds+``, {'headers': {Authorization: 'Bearer '+accessToken+''}})));
}
catch(e) {
console.error(``+emailAddress+` produced the Record Delete Error = ` + e);
}
}
关于javascript - 返回循环中的每个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59380767/