2017-05-31 16 views
0

私は、サーバーとの通信に使用されるすべてのメソッドを保持する一般的な.js crudオブジェクトを書いています。しかし、私は.thenと.catchの繰り返しを避けたいと思います。私は外部の方法でその機能を抽象化したいと思います。約束事から抜粋してください。

私が達成しようとしていることが可能かどうかはわかりません。

以下の私のコード:

all(url, success, fail){ 
    return new Promise((resolve,reject) => { 
    _get(url) 
    .then((response) => { 
     if (response.status == 200) { 
     success.call(this,response); 
     return resolve(); 
     } 
    }) 
    .catch((error) => { 
     fail.call(this, error); 
     reject(error); 
    }); 
});}, submit, update ..... 

ワンダーランド望ましい結果:

all(url, success, fail){ 
    return new Promise((resolve, reject) => { 
    _get(url).handle(args); 
    }); 
} 
+2

「新しい約束」を返す目的は何ですか?なぜ、 'return _get(url).then(...)catch(...)'だけでなく、すでに約束ですか? –

+0

それは実際には予想外に簡単でした。私は約束を新しくしており、私はその部分を逃してしまった。これは実際に私の問題を解決し、私はすべての.thenと.catchロジックを元の約束の中に入れました。コメントを回答として残して、正しいとチェックします。ありがとう – Enrico

+1

質問のタイトルを編集して「解決済み」ラベルを追加しないでください。代わりに、あなた自身で問題を解決した場合は、ソリューションを回答として投稿し、それを受け入れます。 – royhowie

答えて

2

だけPromise constructor antipatternとコールバックを回避し、そしてあなたが良いでしょう!

function all(url) { 
    return _get(url).then((response) => { 
    if (response.status == 200) { 
     return response; 
    } 
    // most likely you want to `throw` an error here? 
    }); 
} 
+0

はい、ありがとうございます。私の場合、 '_get'は別の約束のラッパーであったので、その内部の_handling_ロジックを移動して、次のように呼び出すだけでした: ' _get(url、success、fail) ' – Enrico

+0

'成功を返す関数への 'success'と' fail'コールバックです。 – Bergi

+0

したがって、元の約束の中で成功を呼び出して機能が失敗するのではなく、最後のチェーンブロックでそれらを返して処理する必要がありますか? – Enrico

関連する問題