Amplifyによるデータフェッチと非同期通信について

ほぼ答えに近いコードが掲載してるのが以下。Amplify graphQL Clientを使ったデータフェッチの、

https://qiita.com/otanu/items/2c522a652e5843a5e2c5

また、Amplifyの、getStaticPropsやgetServerSidePropsを使わない、データフェッチのやり方が以下。

https://docs.amplify.aws/lib/graphqlapi/query-data/q/platform/js/

じゃあ、そういう「答え」になる理由は何なのか?ということになると、大前提に「非同期通信のプロセスについて」がある。

以下、それらに関連する、重要な概念等の情報は以下。

■Promiseについて

Promiseオブジェクトは、作成された時点では Pending (待機)状態です。その後のコールバック関数内で resolve() (解決)された時点で Fulfilled 状態となり、then() が実行されます。逆に reject() (失敗)が呼び出された時点で Rejected 状態となり、catch() が実行されます。つまり resolve()reject() も呼び出されない間は pending 状態のまま、次のチェーンには進みません。

状態が一度 Pending から変化すると、その後の状態は二度と変化しないことが約束されています。resolve() または reject() は一度しか実行されません。

https://kde.hateblo.jp/entry/2018/11/01/042432

https://hidekazu-blog.com/javascript-promise/

https://qiita.com/bow_arrow/items/a88cf7a444fb6045b8e4

■await式 について

async/await式は、Promiseのプロセスがわかった前提で使わないと、思わぬ落とし穴にひっかかる。Async Functionはasync/awaitとも呼ばれることがあります。 この呼ばれ方からも分かるように、Async Functionとawait式は共に利用します。

await式はAsync Function内でのみ利用できます。 await式は右辺のPromiseインスタンスがFulfilledまたはRejectedになるまで、その行(文)で非同期処理の完了を待ちます。 そしてPromiseインスタンスの状態が変わると、次の行(文)から処理を再開します。

https://azu.github.io/promises-book/#async-function-await

■in 演算子について

in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/in

ここまでで、

グローバルスコープに、プリレンダリングを複数設置することはできない。それは、コンポーネントが分かれても、同じページに読み込むのであれば一緒。

ということがわかる。

公式ドキュメントからひも解いてみる。

AWS AppSync Javascript SDK で、ApolloClientが使える?この方向性がある?

【公式】

https://github.com/awslabs/aws-mobile-appsync-sdk-js/

【参考ブログ】

https://zenn.dev/amay077/articles/77b08c940decbe