调用时传一个 params,返回时传一个 result,错误时传一个 error。当程序要判断到底是什么样的消息时,就要判断某个 key 是否存在。比如
on('message', message => {
switch (true) {
case 'method' in message:
// 调用
break;
case 'result' in message:
// 返回
break;
case 'error' in message:
// 错误
break;
}
});
而且这是在响应正确的前提下的判断,如果还需要判断并对同时存在的情况抛出异常,比如if ('result' in message ^ 'error' in message) {
// TODO
} else {
// Throw
}
既然它们是必须有且只能有一个的逻辑,那显然就是有一个隐藏的 type,而且是一个枚举类型。为什非要用一堆布尔值加上强行约束来描述一个枚举值?所以我觉得直接传输一个枚举类型的 type,把 params、result、error 统一成一个 key 会更简单。
```
if (data.error) {
throw new Error(data.error)
}
if (data.result) {
// ...
}
```