このトピックでは、EdgeRoutine (ER) のwaitUntilメソッドに関するよくある質問に対する回答を提供します。
フェッチ要求が時々失敗するのはなぜですか?
次の原因により、フェッチリクエストが失敗することがあります。
コンテキストのライフサイクル
addEventListener
メソッドを呼び出してコールバック関数を登録すると、コンテキストが自動的に作成されます。event.respondWith
メソッドによって返されたレスポンスヘッダーと本文を含むResponseオブジェクトが読み取られた後、コンテキストが閉じます。すべての非同期関数のライフサイクルは、コンテキストのライフサイクルに含まれます。 非同期関数は、オブジェクトが解決されるまでPromiseオブジェクトの実行を待ちます。 非同期関数がPromiseオブジェクトの実行を待機しないようにする場合は、event.waitUntilメソッドを呼び出します。 このメソッドは、waitUntilメソッドに渡されたすべてのPromiseオブジェクトが実行されるまで、コンテキストのライフサイクルを拡張します。
コンテキスト間の共有状態
コンテキスト間で状態を共有することはできません。 標準のJavaScript構造にないデータは、コンテキスト間で共有できません。 たとえば、Service Worker APIやStreamオブジェクトの構造内のデータをコンテキスト間で共有することはできません。 コンテキストAがコンテキストAに属さないオブジェクトを使用する場合、ERはオブジェクトを検出し、例外をスローします。
説明状態を共有するには、String、Array、Object、NumberなどのネイティブJavaScriptオブジェクト、またはカスタムクラスを使用できます。
Concurrent Promiseオブジェクト
関数が待機していないPromiseオブジェクトは同時実行です。 ERがサブリクエストを待機するのではなく、リクエストを受信した直後にERがブラウザーに応答する場合は、waitUntilメソッドを呼び出して、プログラムが期待どおりに実行されるようにします。
非同期関数によってスローされる例外
waitUntilステートメントのサブリクエストが例外をスローした場合、コンテキストは終了します。
waitUntilメソッドを複数回呼び出すことはできますか?
waitUntilメソッドを複数回呼び出すことも、waitUntilメソッドを別のwaitUntilメソッド内にネストすることもできます。 このようにして、waitUntilメソッドのいずれかによって返されるPromiseオブジェクトが解決され、コールバック関数でwaitUntilメソッドを引き続き呼び出すことができます。
コンテキストは、特定の応答時間を有する。 応答がタイムアウトした場合、コンテキストは終了します。