如何在 class 验证器模式中传递映射参数
How pass parameter of map inside class validator schema
我试图将 map 函数的每个参数传递给 validate 函数,但 validate 函数中的变量给出了 map 函数的最后一个值
result = jsonData.map(async (id, index) => {
customerInfo = getInfos(id, index);
console.log("map " + customerInfo.id);
return validate("customerSchema", id).then(errors => {
console.log("validate " + customerInfo.id);
if (errors.length > 0) {
throw new HttpException(
{
status: HttpStatus.FORBIDDEN,
error: errors[0].constraints
},
403
);
}
});
});
预期输出:
map 1
validate 1
map 2
validate 2
实际输出:
map 1
map 2
validate 2
validate 2
为什么验证两次获得第二个 ID?
如果您使用 async 函数,则使用 await 而不是 then。您将获得使用 await 的预期输出,因为控件将等待执行 validate 方法,但使用 then 控件只是在不同的线程上执行 then 里面的东西,然后继续在主线程上执行 map 函数。
我试图将 map 函数的每个参数传递给 validate 函数,但 validate 函数中的变量给出了 map 函数的最后一个值
result = jsonData.map(async (id, index) => {
customerInfo = getInfos(id, index);
console.log("map " + customerInfo.id);
return validate("customerSchema", id).then(errors => {
console.log("validate " + customerInfo.id);
if (errors.length > 0) {
throw new HttpException(
{
status: HttpStatus.FORBIDDEN,
error: errors[0].constraints
},
403
);
}
});
});
预期输出:
map 1
validate 1
map 2
validate 2
实际输出:
map 1
map 2
validate 2
validate 2
为什么验证两次获得第二个 ID?
如果您使用 async 函数,则使用 await 而不是 then。您将获得使用 await 的预期输出,因为控件将等待执行 validate 方法,但使用 then 控件只是在不同的线程上执行 then 里面的东西,然后继续在主线程上执行 map 函数。