是否可以在 NestJS 中创建错误数组?
Is it possible to create an array of errors in NestJS?
首先提供一些上下文,这里是一个示例负载:
{
"productType": 2,
"colorId": 43,
"categoryId": 23,
}
假设我有一个产品创建方法,可以进行 3 个不同的调用,每个调用发送一个 ID,
- 一个检查产品类型是否存在。
- 检查所选颜色是否存在。
- 一个检查产品类别是否存在。
如果 id 有效,所有这些调用都必须 return 某些东西(一个对象),如果不是,它应该抛出一个错误,但事情是这样的:如果我需要进行所有这些调用怎么办首先,每次应用程序找不到给定的 ID 时,我都会向字符串数组添加一条错误消息,在完成所有这些调用之后,我 return something.
所以如果产品类型 2 和颜色 43 不在数据库中,但类别 23 在数据库中,它应该 return 像这样:
['Could not find product type with id: 2', 'Could not find color with id: 43']
这给我留下了两个问题:
第一个: 不使用Promise可以设置动态promise吗?像这样:
createProduct(): Promise<StringArray[] || ProductObject> {
return either_an_array or an_object
}
第二个:
我应该如何创建错误数组以及如何向其中添加错误?
一、Promise中的数据类型问题:
您不必 return 具体的错误类型。您可以抛出错误并在调用 createProduct
函数的函数中捕获它。
二、在createProduct中调用多个API
函数并生成错误数组。
您也可以在这里使用 trycatch 以及 async/await.
所以你的函数看起来像这样
async createProduct(): Promise <ProductObject> {
let errors: string[];
try {
const productTypeExist = await checkIfProductTypeExist();
} catch (typeErr) {
errors.push(typeErr);
}
try {
const colorExist = await checkIfColorExist();
} catch (coloreErr) {
errors.push(coloreErr);
}
try {
const catExist = await checkIfCategoryExist();
} catch (catErr) {
errors.push(catErr);
}
if (errors.length) {
throw Error(errors)
}
// if everything goes well
return product_object;
}
除此之外,如果您使用的是最新的node.js。您可以探索 Promise.allSettled
,这将允许您并行调用所有这些函数并立即获取错误。
首先提供一些上下文,这里是一个示例负载:
{
"productType": 2,
"colorId": 43,
"categoryId": 23,
}
假设我有一个产品创建方法,可以进行 3 个不同的调用,每个调用发送一个 ID,
- 一个检查产品类型是否存在。
- 检查所选颜色是否存在。
- 一个检查产品类别是否存在。
如果 id 有效,所有这些调用都必须 return 某些东西(一个对象),如果不是,它应该抛出一个错误,但事情是这样的:如果我需要进行所有这些调用怎么办首先,每次应用程序找不到给定的 ID 时,我都会向字符串数组添加一条错误消息,在完成所有这些调用之后,我 return something.
所以如果产品类型 2 和颜色 43 不在数据库中,但类别 23 在数据库中,它应该 return 像这样:
['Could not find product type with id: 2', 'Could not find color with id: 43']
这给我留下了两个问题:
第一个: 不使用Promise可以设置动态promise吗?像这样:
createProduct(): Promise<StringArray[] || ProductObject> {
return either_an_array or an_object
}
第二个: 我应该如何创建错误数组以及如何向其中添加错误?
一、Promise中的数据类型问题:
您不必 return 具体的错误类型。您可以抛出错误并在调用 createProduct
函数的函数中捕获它。
二、在createProduct中调用多个API 函数并生成错误数组。 您也可以在这里使用 trycatch 以及 async/await.
所以你的函数看起来像这样
async createProduct(): Promise <ProductObject> {
let errors: string[];
try {
const productTypeExist = await checkIfProductTypeExist();
} catch (typeErr) {
errors.push(typeErr);
}
try {
const colorExist = await checkIfColorExist();
} catch (coloreErr) {
errors.push(coloreErr);
}
try {
const catExist = await checkIfCategoryExist();
} catch (catErr) {
errors.push(catErr);
}
if (errors.length) {
throw Error(errors)
}
// if everything goes well
return product_object;
}
除此之外,如果您使用的是最新的node.js。您可以探索 Promise.allSettled
,这将允许您并行调用所有这些函数并立即获取错误。