如果通过Promise.all处理数据时出现错误,则在catch语句中捕获单个记录
Capture individual record in catch statement if any error occurs while processing data through Promise.all
我正在使用 Promise.all 处理多条记录,如果出现任何错误,我想在 catch 语句中捕获单个记录
我写了一个方法callApi 现在我在主代码中调用callApi方法
try {
let result = await callApi(res)
}
catch (err) {
}
async function callApi(records) {
return Promise.all(
records.map(async record => {
await processRecord(record)
})
)
}
如果发生任何错误,我想 display/capture 在 catch 块中单独记录
以下为
try {
let result = await callApi(res)
}
catch (err) {
console.log('Got error while processing this record', record)
}
但是我将如何在 catch 块中获取记录变量
因为它可能会抛出 processRecord
,如果您希望它正在处理的记录是被捕获的,而不是实际的错误,catch
processRecord
错误,并且 throw
记录:
function callApi(records) {
return Promise.all(
records.map(record => (
processRecord(record)
.catch((err) => {
throw record;
})
))
)
}
可能对return捕获时的记录和错误都有用,不过:
try {
let result = await callApi(res)
} catch ({ err, record }) { // <--------
console.log('Got error while processing this record', record);
console.log(err);
}
function callApi(records) {
return Promise.all(
records.map(record => (
processRecord(record)
.catch((err) => {
throw { err, record };
})
))
)
}
请注意,因为 callApi
已经明确地 return 是一个 Promise,所以没有必要使它成为一个 async
函数。
要等待所有请求完成,然后检查每个请求的错误,请执行以下操作:
function callApi(records) {
return Promise.all(
records.map(record => (
processRecord(record)
.then(value => ({ status: 'fulfilled', value }))
.catch(err => ({ status: 'rejected', reason: { record, err } }))
))
);
}
const result = await callApi(res);
const failures = result.filter(({ status }) => status === 'rejected');
failures.forEach(({ reason: { record, err } }) => {
// record failed for reason err
});
我正在使用 Promise.all 处理多条记录,如果出现任何错误,我想在 catch 语句中捕获单个记录
我写了一个方法callApi 现在我在主代码中调用callApi方法
try {
let result = await callApi(res)
}
catch (err) {
}
async function callApi(records) {
return Promise.all(
records.map(async record => {
await processRecord(record)
})
)
}
如果发生任何错误,我想 display/capture 在 catch 块中单独记录 以下为
try {
let result = await callApi(res)
}
catch (err) {
console.log('Got error while processing this record', record)
}
但是我将如何在 catch 块中获取记录变量
因为它可能会抛出 processRecord
,如果您希望它正在处理的记录是被捕获的,而不是实际的错误,catch
processRecord
错误,并且 throw
记录:
function callApi(records) {
return Promise.all(
records.map(record => (
processRecord(record)
.catch((err) => {
throw record;
})
))
)
}
可能对return捕获时的记录和错误都有用,不过:
try {
let result = await callApi(res)
} catch ({ err, record }) { // <--------
console.log('Got error while processing this record', record);
console.log(err);
}
function callApi(records) {
return Promise.all(
records.map(record => (
processRecord(record)
.catch((err) => {
throw { err, record };
})
))
)
}
请注意,因为 callApi
已经明确地 return 是一个 Promise,所以没有必要使它成为一个 async
函数。
要等待所有请求完成,然后检查每个请求的错误,请执行以下操作:
function callApi(records) {
return Promise.all(
records.map(record => (
processRecord(record)
.then(value => ({ status: 'fulfilled', value }))
.catch(err => ({ status: 'rejected', reason: { record, err } }))
))
);
}
const result = await callApi(res);
const failures = result.filter(({ status }) => status === 'rejected');
failures.forEach(({ reason: { record, err } }) => {
// record failed for reason err
});