質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

1回答

266閲覧

値がundefindになる時がある

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

1クリップ

投稿2018/01/17 19:07

編集2022/01/12 10:55

いつもお世話になっております。
monacaとニフクラ mobile backendを使ってアプリを作成しているのですが、取得した値(place_id)がundefindになる時があります。
私のソースコードがいけないのか、monacaがいけないのか判断がつかず…
以下が当該のソースコードです。
事前にDBにplace_idが1~5の場所が登録してあり、ランダムで場所を取得し、取得済み(visited_place_id)として別のテーブルに(配列で)保存するという挙動になります。

html

1<!DOCTYPE HTML> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 6 <meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> 7 <link rel="stylesheet" href="components/loader.css"> 8 <link rel="stylesheet" href="css/style.css"> 9 <script src="components/loader.js"></script> 10 <script src="js/ncmb-2.1.3.min.js"></script> 11 <script src="js/custom.js"></script> 12 <script> 13 $(function() 14 { 15 //mBaaSの初期化 16 var application_key = "XXXXXXX"; 17 var client_key = "XXXXXXX"; 18 var ncmb = new NCMB(application_key, client_key); 19 var place_id; 20 var user_obj_id; 21 var visited_place_id; 22 23 $('#save_id').on('click', function() 24 { 25 //userのobjectIdを取得する 26 var user = ncmb.User.getCurrentUser(); 27 user_obj_id = user["objectId"]; 28 29 //場所のidを取得する 30 var Coordinate = ncmb.DataStore("Coordinate"); 31 Coordinate.fetchAll() 32 .then(function(results){ 33 place_id = results[Math.floor(Math.random() * 4)].place_id; 34 console.log("place_id_1 : " + place_id); 35 return place_id; 36 }) 37 .catch(function(err){ 38 alert("place_idとれなかったよ"); 39 }); 40 41 //visited_place_idにplace_idを追加する 42 var visited = ncmb.DataStore("Visited"); 43 visited.equalTo("user_objectId", user_obj_id) 44 .fetchAll() 45 .then(function(results){ 46 var visited_place_id = results[0].visited_place_id; 47 visited_place_id.push(place_id); 48 results[0].set("visited_place_id", visited_place_id) 49 .update() 50 .then(function() 51 { 52 alert("更新完了!"); 53 location.href = "./visited_list.html"; 54 }) 55 .catch(function(err) 56 { 57 alert("送信できんかった\n" + err); 58 }) 59 return false; 60 }) 61 .catch(function(err){ 62 console.log(err); 63 }); 64 return false; 65 }); 66 67 68 }); 69 </script> 70</head> 71<body> 72 <p> 73 ここはhome.htmlです 74 </p> 75 <form> 76 <input type="submit" id="save_id" value="idを保存する!" /> 77 <!-- <input type="submit" id="logout" value="ログアウト" /> --> 78 </form> 79</body> 80</html>

初歩的な質問で申し訳ないですが、ご教授いただければと思います。
どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

console.log("place_id_1 : " + place_id);undefindならresultsが自分の予想している内容と違うか確認してみてください。

visited_place_id.push(place_id); の部分であれば、.fetchAll() は非同期で動くため、Coordinate.fetchAll()then の中で visited.equalTo を実行してみては。

投稿2018/01/17 19:31

kei344

総合スコア69366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/17 19:39

いつもありがとうございますm(._.)m place_id_1は毎回問題なくとれるので、Coordinate.fetchAll() の then の中に visited.equalTo以下の処理を移したところ、ページ遷移しなくなってしまいました><
kei344

2018/01/17 19:44

var visited = ncmb.DataStore("Visited");から入れていますか? 同じ環境を再現できないので状況はわかりませんが、非同期処理部分の問題であることは確実ですね。
退会済みユーザー

退会済みユーザー

2018/01/17 19:47

そうです! エラーも特に出ていないです。非同期処理の中に非同期処理を入れたらダメってことなんでしょうか…
kei344

2018/01/17 23:57

修正したコードを質問文に「追記」してください。(決して元のコードを消さないでください)
miyabi-sun

2018/01/18 01:32

console.log("place_id_1 : " + place_id); プラスでStringに変換かけずに、第二引数にした方がわかりやすいのでよく利用しています。 console.log("place_id_1 :", place_id);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問