Promiseですべてをラップする必要はありません

オリジナル記事







isPi



関数を開発していると想像してください:







 function isPi(x) { return x === 3.14 }
      
      





そして誰かが言う:「データがどこから来たか(データベース、ネットワークなど)を知りたくないので、Promiseでコードをラップしましょう」:









 function isPi(px) { return px.then(x => return x === 3.14 }) }
      
      





そして、次のような関数を呼び出します。







 const px = grabXfromDb() isPi(px)
      
      





-かっこいい? -いいえ







問題は、「非同期または同期コードが処理されないように、Promiseでコードをラップする」というステートメントが正しくないことです。 コードをラップしませんが、Promiseは次のことが可能な「何か」です。









将来のいつか:







 px.then(x => //    x    ""  isPi(x) )
      
      





したがって、冗長なコードを削除できます。







 function isPi(x) { return x === 3.14 } const px = grabXfromDb() px.then(isPi)
      
      





あなたは尋ねるかもしれません:さて、最初のコードは少し冗長です、それで何が悪いのですか? エラーリターンを追加しようとすると問題が発生します。次のようなもので終了するのは非常に簡単です。







 function isPi(px) { return px.then(x => return x === 3.14 }) .catch(fuction(e) { assert(e instanceof SomeDBError) // -       }) }
      
      





これは、Promiseを取得した場所について、エラーを介して関数が認識しすぎているためです。 このコードを書き換える正しい方法は次のとおりです。







 function isPi(x) { return x === 3.14 } grabXfromDb() .catch(fuction(e) { assert(e instanceof SomeDBError) // some code here }) .then(isPi)
      
      





いくつかの簡単なルール:










All Articles