2020-09-03
しごと
tosuke.iconrinsuki.iconotofune.iconci7lus.iconでイカをした
リグマ+ナワバリ
Promiseをthrowするのはなぜ天才的デザインなのか - Qiitaのコメント欄をみていた
自分は「同期処理されるReact Componentのrenderで、『非同期な値を読もうとしているので処理を継続できない』というのは例外的な状態である」と思う立場
別にここについて「天才的」と言うつもりはあまりない
なるほど、そうやるんですねという感じ
throw Promiseについて「天才的」な部分を挙げるとすれば、これは紛れもなく例外の送出であり、それによってHooksの状態がリセットされるということ
このことによってコンポーネント内で自分の使う非同期オブジェクトを用意するということはできなくなり、Render-As-You-Fetchパターンを使わざるを得なくなる
Vue.jsにもSuspenseが存在するが、setup関数を非同期にするという形で実現される
これはthrow Promiseに反対する人達の考える、同期と非同期を分離したAPI
しかし、awaitはPromiseを直列に合成するため、素直にやると非効率になってしまうはず
Promise.allで合成するという手もあるが、これを続けるとコードが複雑になってしまうとReactチームは指摘している
Reactチームのやってほしい方向へアプリケーションの設計を誘導するという意味で「天才的」
「できること」よりも「できないこと」のほうが重要というやつですね
#日記