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 サイトの他の関連記事を参照してください。