ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で非同期コールバック関数から値を取得するにはどうすればよいですか?

JavaScript で非同期コールバック関数から値を取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-30 19:13:09
オリジナル
920 人が閲覧しました

How Can I Retrieve Values from Asynchronous Callback Functions in JavaScript?

JavaScript で非同期コールバック関数の戻り値を処理する方法

非同期コールバック関数は、同期メソッド内から値を取得するときに問題を引き起こします。次のコード スニペットを考えてみましょう。これは、コールバック関数から位置値を取得しようとしています:

function foo(address) {
  geocoder.geocode({ 'address': address }, function (results, status) {
    results[0].geometry.location; // I want to return this value
  });
}

foo(); // result should be results[0].geometry.location; value
ログイン後にコピー

ただし、値を直接返そうとすると、結果は「未定義」になります。中間変数またはコールバックの受け渡しを使用した後続の試行も失敗しました。

解決策: コールバックの受け渡し

同期メソッドで非同期コールバック関数から値を返すことは不可能です。代わりに、戻り値を受け取るためにコールバックを非同期関数に渡す必要があります。

function foo(address, fn) {
  geocoder.geocode({ 'address': address }, function (results, status) {
    fn(results[0].geometry.location);
  });
}

foo("address", function (location) {
  alert(location); // this is where you get the return value
});
ログイン後にコピー

この改訂されたコードでは、foo 関数は戻り値を処理するコールバック fn を受け入れます。次に、非同期関数 geocoder.geocode は、位置の値を引数として fn に渡します。その後、コールバック関数は、必要に応じて位置の値を使用できます。

非同期プログラミングの考慮事項

内部関数呼び出しが非同期の場合、それを囲んでいるすべての関数も非同期である必要があることに注意してください。応答を返します。多数のコールバックを扱う場合は、プロセスを簡素化するために Q などの Promise ライブラリの使用を検討してください。

以上がJavaScript で非同期コールバック関数から値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート