初心者です。Javascriptの関数についての質問です。
requestモジュールを使用してAPIをたたき、結果をreturn値として返す関数を作りたいと思っています。(簡潔にするためurl部分は省略しています。)
var forsquare = require("request");
function Search(lat,lon,radius){
var client_id = "****************";
var client_secret = "*****************";
var url = "*****************";
var options = {
url: url,
json: true
};
forsquare.get(options, function (error, response, body){
if (! ("groups" in body.response)) {
console.log(error);
} else {
var result = body.response.groups[0].items;
return result;
};
});
};
var a = Search(lat, lon, radius);
console.log(a);
resultをreturnで返したいと思っているのですが結果が"undefine"となってしまいます。
スコープの問題で、resultの参照範囲がforsquare.get以降にある無名関数の中に限られることが原因であると思っているのですが、get以降の結果を外部から参照する方法が思いつきません。
コード全体を無名関数として囲ってしまう方法?等も試したのですがうまくいきませんでした。どなたかご教示していただけますと助かります。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
不明な情報があるので、よくわかりませんが・・・
ajaxのような処理を行っているのではないかと推測しました。
(「requestモジュール」と書いてあるので、node.jsのたぐいでしょうか?)
(仮にそうでも、node.jsを知らないので同じことなんですが(笑))
関数の戻り値は、呼び出し元に返されます。
ご提示の
var a = Search(lat, lon, radius);
の場合でみると、Search関数はreturn値をもたないので、aの値はundefinedとなります。
それなので、ご質問のような状態になっているのではないでしょうか?
(半分推測ですが…)
また、forsquare.get()の第二引数は、いわゆるcallback関数と仮定すれば・・・
callback関数は、通常、ある処理(例えば送受信)が完了した時点で実行されますので、
>var a = Search(lat, lon, radius); //①
>console.log(a); //②
①でSearch関数から制御が戻った時点では、まだcallback関数が実行されていない可能性が高いと思われます。
それなので、②の処理の際にも同様にまだ結果は受け取っていないはず。
関数の仕組みと、実行のタイミングを再確認してみてください。
(かなりの憶測で書いてますので、外れてたらごめんなさい)
>resultの参照範囲がforsquare.get以降にある無名関数の中に限られることが~~
関数内部で定義された変数は、直接、関数の外部からは参照できませんが、return値は関数の呼び出し元に返されますよ。(そのためのreturn文のはずです)
ご質問の場合、匿名関数の呼び出し元は、関数forsquare.get内にあると推測されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript JavaScriptの即時関数の書き方 1 2022/11/29 09:52
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript 正規表現について質問です。条件に合う場合はtrueを返したい 3 2022/10/06 23:02
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLで作った時報アプリが動き...
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
リンク集をCSVファイルで管理し...
-
特定のclassを表示、非表示にする
-
ジェネレーターの作り方
-
javascriptカウントダウン終了...
-
Ajaxでタイムアウトしてしまう
-
今日からnヶ月後(前)
-
カンマで終わってるのはセミコ...
-
ローカルにあるファイルを検索...
-
引数なしの関数で疑問です
-
テーブルセル内のinput要素のna...
-
翌月を取得するGASが分かりません
-
ボタンを押すことでテキストエ...
-
なぜmatchメソッドがエラーにな...
-
var exports = exports || {}; ...
-
1日1回引けるJavaScriptおみく...
-
JScriptでExcelの全シートにア...
-
スマフォではボタンを表示させ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
GASでundefinedエラーが出ます
-
ローカルにあるファイルを検索...
-
JavaScriptで文字列の特定文字...
-
ジェネレーターの作り方
-
javascriptでiframeのURL変更は?
-
なぜmatchメソッドがエラーにな...
-
ASP.NET MVCでObjectをjsに渡す
-
gas スプレッドシートがアクテ...
-
Google Apps Script で添付ファ...
-
html javascript リンク先アド...
-
ASP.NETのコントロールの値をJa...
-
javascriptでテーブルに追加し...
-
C言語の質問です HTMLでこのよ...
-
JavaScriptで決まった「時刻」...
-
翌月を取得するGASが分かりません
-
特定のclassを表示、非表示にする
-
どうすれば良いでしょうか?
-
HTMLにWSHを組み込む
おすすめ情報