問題タブ [asynchronous-javascript]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 非同期関数の呼び出し元は非同期にする必要がありますか?
呼び出し先関数 (CE) がキーワードで宣言され、非同期関数である場合、呼び出し元関数 (CR) はasync
キーワードで宣言され、したがって非同期関数である必要がありasync
ますか? CE の呼び出し以外に CR によって実行される他の非同期タスクはないと仮定しますが、CR には、CE から受信した応答に依存するいくつかのロジックがあります。
たとえばapiUtils.js
、API 呼び出しを行うための一般的な非同期関数で構成されるファイルがあります。この関数には次のシグネチャがあります。
apiUtils.js
特定の API リクエストを送信するためにファイルをインポートする他のファイルもあります。たとえば、次の署名で名前が付けられた関数userApi.js
をインポートして持つファイルがあります。apiUtils.js
doLogin()
doLogin()
関数をキーワードで宣言してasync
非同期関数にする必要がありますか? はいの場合、コール スタック内のすべての呼び出し元をasync
キーワードで宣言し、したがって非同期関数にする必要があります (関数を呼び出す別の関数 F を想定しdoLogin()
ます)。なぜそうなのですか?
PS:キーワードが関数本体内で使用されている、または/ブロックが使用されているという事実に基づいて、関数のasync
キーワードの使用法を決定することは無視してください。キーワードは、デモンストレーションのみを目的として使用されています。Promise の連鎖を想定することもできます。doLogin()
await
try
catch
async/await
javascript - async await を使用して、すべてのコードが実行される前に応答を停止する方法
アクティブなユーザーを見つけるのに役立つ getActiveUsers という名前の関数があります
まず、reward コレクションからデータを取得します。これにより、rewards 配列に 100 レコードが返されます。すべての結果を待った後、取得した配列 (報酬) を 1 つずつ調べて、Callback という別のコレクションからデータを取得します。そして、このデータはresultsという別の配列に1つずつプッシュされます。残念ながら、私のコードは map 関数を待ちません。応答を空の配列 (results) として送信します。その後、マップを実行し、要素を結果配列にプッシュします。async/await のみを使用して、これを修正してください。それが不可能な場合は、最善の解決策を教えてください。