呼び出し先関数 (CE) がキーワードで宣言され、非同期関数である場合、呼び出し元関数 (CR) はasync
キーワードで宣言され、したがって非同期関数である必要がありasync
ますか? CE の呼び出し以外に CR によって実行される他の非同期タスクはないと仮定しますが、CR には、CE から受信した応答に依存するいくつかのロジックがあります。
たとえばapiUtils.js
、API 呼び出しを行うための一般的な非同期関数で構成されるファイルがあります。この関数には次のシグネチャがあります。
export const sendApiRequest = async (apiParametersGoHere) => {
try {
const response = await axios(objectForAxiosAsParameter); // axios() can be replaced with fetch() or XMLHttpRequest(); the idea remains the same
// processing of response
} catch (error) {
// processing of error
}
}
apiUtils.js
特定の API リクエストを送信するためにファイルをインポートする他のファイルもあります。たとえば、次の署名で名前が付けられた関数userApi.js
をインポートして持つファイルがあります。apiUtils.js
doLogin()
export const doLogin = async (userLoginRelatedParameters) => {
try {
const response = await apiUtils.sendApiRequest(apiArgumentsGoHere);
// processing of response
} catch (error) {
// processing of error
}
}
doLogin()
関数をキーワードで宣言してasync
非同期関数にする必要がありますか? はいの場合、コール スタック内のすべての呼び出し元をasync
キーワードで宣言し、したがって非同期関数にする必要があります (関数を呼び出す別の関数 F を想定しdoLogin()
ます)。なぜそうなのですか?
PS:キーワードが関数本体内で使用されている、または/ブロックが使用されているという事実に基づいて、関数のasync
キーワードの使用法を決定することは無視してください。キーワードは、デモンストレーションのみを目的として使用されています。Promise の連鎖を想定することもできます。doLogin()
await
try
catch
async/await