是否可以在 NestJS 中创建错误数组?

Is it possible to create an array of errors in NestJS?

首先提供一些上下文,这里是一个示例负载:

{ 
"productType": 2,
"colorId": 43,
"categoryId": 23,
}

假设我有一个产品创建方法,可以进行 3 个不同的调用,每个调用发送一个 ID,

  1. 一个检查产品类型是否存在。
  2. 检查所选颜色是否存在。
  3. 一个检查产品类别是否存在。

如果 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,这将允许您并行调用所有这些函数并立即获取错误。