我正在使用API,该API会在用户提交数据之前返回用于验证表单的架构。
例如,架构有一个User
类,其中包含一个名为email
的属性。如果出现错误,User.validators.getEmailErrors()
会返回所有错误的Array
,例如['Email address cannot be blank', 'Email addresses must match']
。
但是,如果该字段有效且未发现任何错误,则getEmailErrors()
会返回null
。
在我的应用中,我想安全地从getEmailErrors()
链接更多方法,例如getEmailErrors().join(',')
,但未事先检查null
。相反,有没有办法,例如使用ES6代理,让getEmailAddress()
知道它是否会返回Array
,并安全地忽略join()
之类的任何方法,以防它返回null
?
简单的解决方案是在有效案例中返回空Array
而不是null
,但假设我无法更改。
答案 0 :(得分:0)
可以间接完成。
以下代码来自HERE,我添加了一些代码供测试。
感谢原作者Djamel Hassaine。
{
class test {
constructor () {
this.in = 0;
}
sum ( a, b ) {
this.in += a + b;
return this;
}
}
let k = new test();
function traceMethodCalls(obj) {
const handler = {
get(target, propKey, receiver) {
console.log( target, propKey, receiver );
console.log( this );
console.log( handler === this );
const targetValue = Reflect.get(target, propKey, receiver);
if (typeof targetValue === 'function') {
return function (...args) {
console.log('CALL', propKey, args);
console.log( this );
console.log( this === receiver );
return targetValue.apply(this, args); // (A)
}
} else {
return targetValue;
}
}
};
return new Proxy(obj, handler);
}
let l = traceMethodCalls( k );
console.log( l.sum( 1, 2 ) );
console.log( l );
console.log( l.sum( 1, 2 ) );
console.log( l );
}
另一种方式:
User.validators.getEmailErrorsOriginal = User.validators.getEmailErrors
User.validators.getEmailErrors = function ( ...args ) {
return ( this.getEmailErrorsOriginal( ...args ) || [] );
}
答案 1 :(得分:0)
(getEmailErrors() || []).join(',')
这是你要找的吗?它不是很干净,但肯定很短......