我正在尝试将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?
答案 0 :(得分:1)
如果您正在使用 async 函数,请使用 await 代替 then 。使用 await 可以得到预期的输出,因为控件将等待 validate 方法的执行,但是使用 then 控件将仅执行内容在另一个线程内的 then 中,并继续在主线程上执行 map 函数。