我有许多函数在返回promise时执行完全相同的操作。 this.client
是一组API调用的包装器,它们返回响应或错误。我希望以同样的方式处理这些问题。
任何想法都可以将这些方法中的每一种都减少为一个衬里吗?
getHealthCheck() {
return this.client.tools.healthcheck().then((response) => {
return {success: true, result: response};
}).catch((err) => {
return {success: false, err: err };
});;
}
createUser(data) {
return this.client.users.create(data).then((response) => {
return {success: true, result: response};
}).catch((err) => {
return {success: false, err: err };
});;
}
createCardAccount(data) {
return this.client.cardAccounts.create(data).then((response) => {
return {success: true, result: response};
}).catch((err) => {
return {success: false, err: err };
});;
}
createBankAccount(data) {
return this.client.bankAccounts.create(data).then((response) => {
return {success: true, result: response};
}).catch((err) => {
return {success: false, err: err };
});;
}
makePayment(data) {
return this.client.items.makePayment(data).then((response) => {
return {success: true, result: response};
}).catch((err) => {
return {success: false, err: err };
});;
}
答案 0 :(得分:2)
为什么不将响应提升到另一种类型:
type Success<T> = {success: true, result: T};
type Failure = {success: false, err: Error};
type Result<T> = Success<T> | Failure;
const Result = {
from<T>(promise: Promise<T>): Promise<Result<T>> {
return promise
.then(result => ({success: true, result}))
.catch(err => ({success: false, err}));
}
}
然后您可以这样使用它:
return Result.from(this.client.tools.healthcheck());
答案 1 :(得分:1)
你成功和错误的回调似乎是一样的.. 你可以这样做:
successHandler = (response:any)=>{
return {success: true, result: response};
}
errorHandler = (error:any)=>{
return {success: false, err: err };
}
并且针对您的所有要求,
getHealthCheck() {
return this.client.tools.healthcheck().then(this.successHandler).catch(this.errorHandler);
}
// other calls
其DRY原则。