[解決済み] 非同期コールバック関数から値を返すには?重複
2022-03-18 08:39:45
質問
この質問はSOで何度も質問されています。しかし、それでも私はものを得ることができません。
コールバックから何らかの値を取得したいのですが。以下のスクリプトを参照してください。
function foo(address){
// google map stuff
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
その値を返そうとすると、"undefined"が返ってくるだけです。SOからいくつかのアイデアを追いましたが はまだ失敗しています。
それらは
function foo(address){
var returnvalue;
geocoder.geocode( { 'address': address}, function(results, status) {
returnvalue = results[0].geometry.location;
})
return returnvalue;
}
foo(); //still undefined
解決方法は?
同期メソッドの内部で非同期呼び出しから戻ることはできないので、これは不可能です。
この場合、戻り値を受け取るコールバックを foo に渡す必要があります。
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
});
つまり、内部関数の呼び出しが非同期である場合、レスポンスを「返す」ためには、この呼び出しを「ラップ」するすべての関数も非同期でなければならないということです。
コールバックがたくさんある場合は、思い切って Qのようなプロミスライブラリ .
関連
-
Vueのクラススタイルの使い方の詳細
-
JavaScriptのgetElementById()メソッド入門
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] オブジェクトの配列から、プロパティの値を配列として取り出す。
-
[解決済み] どうすればjQueryに非同期ではなく、同期のAjaxリクエストを実行させることができますか?
-
[解決済み] setTimeout()コールバックにパラメータを渡すにはどうすればよいですか?
-
[解決済み] 関数内で変数を変更した後、変数が変更されないのはなぜですか?- 非同期コードリファレンス
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptのクロージャの説明
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueディレクティブv-bindの使用と注意点
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueの「データを聴く」原則を解説
-
Vueのフィルタの説明
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方