promisify js方法时如何避免逻辑重复?
How to avoid logic duplication when promisifying js methods?
最近我接受了承诺链模式。这样做很方便:
action1
.then(()=> action2())
.then(()=> action3());
但是,为了做到这一点,我像这样更改了所有方法 (TypeScript):
action1() : Promise<any>{
try{
// actual code
return Promise.resolve();
} catch (err){
console.error(err);
return Promise.reject(err);
}
}
这看起来像是非常重复的模式。避免代码重复的最佳方法是什么?
编写一个函数将 promise 包装在一个函数上,您可以重用它
wrapPromise(fun) : Promise<any>{
try{
var value = fun()
return Promise.resolve(value);
} catch (err){
console.error(err);
return Promise.reject(err);
}
}
wrapPromise(action1).then()
由于您使用的是打字稿,因此您需要使用 async
/await
。简单做
async action1(): Promise<any>{
try {
return // actual code;
} catch (err){
console.error(err);
throw err;
}
}
然而,您很有可能实际上不想捕获、记录并重新抛出每个函数中的所有错误,因此这简化为
async action1(): Promise<any>{
return // actual code;
}
最近我接受了承诺链模式。这样做很方便:
action1
.then(()=> action2())
.then(()=> action3());
但是,为了做到这一点,我像这样更改了所有方法 (TypeScript):
action1() : Promise<any>{
try{
// actual code
return Promise.resolve();
} catch (err){
console.error(err);
return Promise.reject(err);
}
}
这看起来像是非常重复的模式。避免代码重复的最佳方法是什么?
编写一个函数将 promise 包装在一个函数上,您可以重用它
wrapPromise(fun) : Promise<any>{
try{
var value = fun()
return Promise.resolve(value);
} catch (err){
console.error(err);
return Promise.reject(err);
}
}
wrapPromise(action1).then()
由于您使用的是打字稿,因此您需要使用 async
/await
。简单做
async action1(): Promise<any>{
try {
return // actual code;
} catch (err){
console.error(err);
throw err;
}
}
然而,您很有可能实际上不想捕获、记录并重新抛出每个函数中的所有错误,因此这简化为
async action1(): Promise<any>{
return // actual code;
}