2016-12-07 14 views
2

最近、私は約束の連鎖パターンを受け入れました。jsメソッドを約束する際にロジックの重複を避けるには?

action1 
.then(()=> action2()) 
.then(()=> action3()); 

しかし、それを行うために、私はこのようなすべての私のメソッド(活字体)に変更:それはこのように行うには非常に便利です

action1() : Promise<any>{ 
    try{ 
    // actual code 
    return Promise.resolve(); 
    } catch (err){ 
    console.error(err); 
    return Promise.reject(err); 
    } 
} 

これは非常に繰り返しパターンのように見えます。コードの重複を避ける最良の方法は何ですか?

+0

このように簡単になりますほとんどどんな意味がありません。自分の '// actual code'が同期しているときに、なぜ約束を使うのですか? @Bergi、右。 – Bergi

+0

しかし、私はそれをとにかくチェーンしたいです –

+0

同期関数の連鎖には 'action3(action2(action1()))'を使うだけですか?または、関数の構成を使用します。同期コードには約束を絶対に使わないでください。 – Bergi

答えて

2

は、機能の上に約束をラップする関数を記述し、あなたはtypescriptですを使用しているので

wrapPromise(fun) : Promise<any>{ 
    try{ 
    var value = fun() 
    return Promise.resolve(value); 
    } catch (err){ 
    console.error(err); 
    return Promise.reject(err); 
    } 
} 


wrapPromise(action1).then() 
+0

ええ、そうです。しかし、人々はこれを本当に好きですか?ベストプラクティスは何ですか? –

+1

@PavelEvdokimovベストプラクティスは同期コードに約束を使用しないことです... – Bergi

0

、あなたがasync/awaitを使用したいと思う、それを再利用することができます。単に

async action1(): Promise<any>{ 
    try { 
    return // actual code; 
    } catch (err){ 
    console.error(err); 
    throw err; 
    } 
} 

は、しかし、あなたが実際にはすべての関数のすべてのエラーをキャッチログインして再スローする必要はありません良いチャンスがありますので、これは

async action1(): Promise<any>{ 
    return // actual code; 
} 
+0

これは2.0以降のものですか? –

+0

リンク先には1.7と書いてあります。 – Bergi

+0

@Bergi ES6をターゲットにしている場合のみ。 –

関連する問題