我想知道是否有办法抛出多个错误并在JavaScript中捕获所有错误。
我正在寻找特定的字段,当我找到一个丢失的字段时,我想抛出一个错误。
问题是,如果我抛出一个错误,例如:
throw "you are missing field: " xxxxxx
我没有告诉用户他/她缺少的所有其他字段。
我也不想将所有内容组合成一个字符串,因为错误消息可能太长了。
有什么想法吗?
感谢。
答案 0 :(得分:0)
你可以抛出任何类型的对象,你不仅限于字符串,所以你也可以将你的错误消息收集到一个对象中,如果出现任何错误,最后抛出它。
答案 1 :(得分:0)
您创建自己的select conversation_id from (
select conversation_id, count(*) as count, t1.user_id as user_1, t2.user_id as user_2
from table t1
join table t2 on (t1.conversation_id = t2.conversation_id and t1.user_id != t2.user_id)
where t1.user_id = 1000001 and
t2.user_id = 1000002
) as inner_table
where inner_table.count = 2
类型,其中包含缺少字段的列表:
Error
要使用它,您可以首先收集所有缺少的字段,然后抛出class MissingFieldsError extends Error {
constructor(fields, ...params) {
super(...params);
this.fields_ = fields;
}
getMissingFields() {
return this.fields_;
}
}
的实例。
假设您有某种类型的MissingFieldsError
实例数组,代码应如下所示:
Field
如果您愿意,您甚至可以分别抛出const missingFields = fields
.filter((field) => field.isMissing())
.map((field) => field.getName());
if (missingFields.length > 0) {
throw new MissingFieldsError(
missingFields, 'Some required fields are missing.');
}
,收集它们,然后抛出Error
:
MissingFieldsError
答案 2 :(得分:0)
嘿,目前正在处理与此相关的问题。只是想添加一些想法。
throw
允许您抛出任何表达式,并且会生成一个异常,如果该异常存在且填充了值作为参数(通常为catch
),它将引发Error
子句。不过,这是用户定义的,因此您基本上可以抛出任何想要的东西。
因此,如果您真的想抛出一系列异常,则完全可以。即类似这样的
try {
var errors = [];
for (let i=0; i<10; i++) {
errors.push(new Error('Here is a special exception'));
}
if (errors.length > 0) {
throw errors;
}
} catch(e) {
for (let i=0; i<e.length; i++) {
console.log(e[i]);
}
}
我认为有些事情要注意
await
和Promise.all
(除非您不介意遗漏异常)。 就实践的好坏而言,我实在找不到太多。我会轻描淡写,并了解您的用例是否真的需要这个。有时候这很有用,但是您可能不需要处理整个异常数组。
希望这会有所帮助。