如果抛出错误,如何继续 运行 链下的功能?
How to continue running functions down the chain if an error threw?
所以,我应该创建一些带有验证链的函数,例如:
isValid('Test string').required().isString().min(5);
如果没有比较,函数应该抛出错误。
我有一个问题,如果出现错误,它不会继续工作,我尝试添加 try catch,但随后测试显示它不会引发错误。我想通过 .toThrowError() 测试并继续链接
function isValid(str) {
return {
required: function() {
if (str === '') {
console.log("dasdsada2",str, this)
throw new Error('Required!');
}
return this;
},
isString: () => {
if (typeof str !== 'string') {
throw new Error('Should be a string!');
}
return this;
},
min: (minNum) => {
if (str.length < minNum) {
throw new Error('Should be more than min');
}
return this;
}
};
}
你可以制作一个函数,用一个包装器包装所有函数,该包装器捕获错误并将它们存储在一个数组中,然后一个方法在最后将所有错误一起抛出:
function wrapErrors(obj) {
const errors = [];
const ret = {};
for (const key in obj) {
const func = obj[key];
ret[key] = function() {
try {
func.apply(this, arguments);
} catch (err) {
errors.push(err.message);
}
return this;
};
}
ret.throwErrors = function() {
if (errors.length > 0) {
throw new Error("Got errors: " + errors.join(", "));
}
return this;
};
return ret;
}
// throws nothing
wrapErrors(isValid('Test string')).required().isString().min(5).throwErrors();
// throws 'Got errors: Required!, Should be more than min'
wrapErrors(isValid('')).required().isString().min(5).throwErrors();
所以,我应该创建一些带有验证链的函数,例如:
isValid('Test string').required().isString().min(5);
如果没有比较,函数应该抛出错误。
我有一个问题,如果出现错误,它不会继续工作,我尝试添加 try catch,但随后测试显示它不会引发错误。我想通过 .toThrowError() 测试并继续链接
function isValid(str) {
return {
required: function() {
if (str === '') {
console.log("dasdsada2",str, this)
throw new Error('Required!');
}
return this;
},
isString: () => {
if (typeof str !== 'string') {
throw new Error('Should be a string!');
}
return this;
},
min: (minNum) => {
if (str.length < minNum) {
throw new Error('Should be more than min');
}
return this;
}
};
}
你可以制作一个函数,用一个包装器包装所有函数,该包装器捕获错误并将它们存储在一个数组中,然后一个方法在最后将所有错误一起抛出:
function wrapErrors(obj) {
const errors = [];
const ret = {};
for (const key in obj) {
const func = obj[key];
ret[key] = function() {
try {
func.apply(this, arguments);
} catch (err) {
errors.push(err.message);
}
return this;
};
}
ret.throwErrors = function() {
if (errors.length > 0) {
throw new Error("Got errors: " + errors.join(", "));
}
return this;
};
return ret;
}
// throws nothing
wrapErrors(isValid('Test string')).required().isString().min(5).throwErrors();
// throws 'Got errors: Required!, Should be more than min'
wrapErrors(isValid('')).required().isString().min(5).throwErrors();