2016-09-25 6 views
2
かなりここの約束に新しい、と私は思っていた

..私は作成していない約束を拒否する方法は?

取り扱い約束のためにbluebirdパッケージを見て取った後:リゾルバを成功に

  • 解決を作成

    • /失敗
    • に拒否
    • 作成されたリゾルバを返すpromiseプロパティ

    私はどのように私はach既にpromiseを作成しているパッケージを使用してcatchを発行するという約束を拒否した場合と同じ効果があり、ちょうど彼らの.thenチェーンを使用していますか?

    私が意味するのは、自分の作成リゾルバでrejectを使用すると、最終的にはこの機能のユーザにcatchが呼び出されるということです。

    リゾルバを持っていないと、どうすればcatchを発行できますか?

    function doSomthing(): Promise<someValue> 
        return somePackage.someMethodWithPromise().then((result)=> { 
         return someValueToTheNextThen; 
        }) 
    } 
    

    thenは、エラーがあるかどうかを確認し、それに反応するが、私がしたいことができるように私はそれを達成するいくつかのパッケージを見てきた唯一の方法は{ errors, result }オブジェクトを返すことである次のような約束を連鎖catchを発行し、すべてのエラーをチェックしないでくださいthen私は..

    私は自分自身を明確にしました、何かが不足している場合は教えてください。

    ありがとうございました!

  • 答えて

    2

    .thenはプロミスも返します。エラーがあると判断した場合は、拒否された約束事を作成してそこから返すことができます。

    return somePackage.someMethodWithPromise().then(result => { 
        if (result.erroneous()) return Promise.reject('erroneous data'); 
        return someValueToTheNextThen; 
    }) 
    

    あなたは、単にthrow anError;thenからもcatchブロックにcatchedことになる可能性があります。

    +0

    おかげで、非常に有望に見える;)病気明日それに打撃を与えるとすぐにあなたの答えを受け入れます私はこの作品を参照してください:) –

    3

    同期コードと同様に、エラーをスローすることでこれを達成できます。これは、あなたが約束を使用してthenチェーンの内側にすでにあるしているときに行うには、慣用的なものである:あなたの迅速な応答を

    function doSomething(): Promise<someValue> 
        return somePackage.someMethodWithPromise().then((result)=> { 
         if (badResult(result)) { 
          throw new Error('Bad result!'); 
         } 
    
         return someValueToTheNextThen; 
        }) 
    } 
    
    
    doSomething() 
        .then(result => { 
         // this will get skipped if an error was thrown 
        }) 
        .catch(error => { 
         // error will be caught here if one was thrown 
         console.error(error); 
        }); 
    
    +0

    ありがとう、それは打撃を与える! –

    関連する問題